【发布时间】:2015-06-15 23:40:31
【问题描述】:
我正在尝试在 Visual Studio 2013 项目中查找某些代码部分。我正在为此使用 RegEx 搜索功能(我检查了搜索选项下的“使用正则表达式”)。
更具体地说,我试图找到位于开始和结束脚本标记之间的字符串“findthis”(不带引号)。 RegEx 应该能够匹配多行字符串。
例子:
<html>
<head>
<script>
var x = 1;
if (x < 1) {
x = 100;
}
var y = 'findthis'; // Should be matched
</script>
</head>
<body>
<script>
var a = 2;
</script>
<h1>Welcome!</h1>
<p>This findthis here should not be matched.</p>
<script>
var b = 'findthis too'; // Should be matched, too.
</script>
<div>
<p>This findthis should not be matched neither.</p>
</div>
</body>
</html>
到目前为止我尝试过的如下((?s) 启用多行):
(?s)\<script\>.*?(findthis).*?\</script\>
这里的问题是当脚本结束标记出现时它不会停止搜索“findthis”。这就是为什么在 Visual Studio 2013 中,它还在搜索结果中的正文开始标记之后显示脚本元素。
谁能帮我摆脱这个正则表达式的地狱?
【问题讨论】:
-
不幸的是,Regex 不适合解析 HTML。
-
不需要对 HTML 进行严格正确的解析。我只想匹配出现在字符串 x 和字符串 y 之间的字符串。并且字符串 x 和 y 应该能够在文本中出现不同的时间。所以它应该停止在字符串 y 处搜索,我想这是这里最难的部分。
-
你总是知道搜索词是什么标签吗?
标签: html regex visual-studio-2013