我想使用 Regexp选择每个<
字符,但<pre
或在此文档中</pre
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<pre>
if a < b
</pre>
</body>
</html>
我想使用 Regexp选择每个<
字符,但<pre
或在此文档中</pre
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<pre>
if a < b
</pre>
</body>
</html>
这将取决于正则表达式引擎。如果它支持带有负前瞻断言的 Perl 正则表达式,你可以这样做
<(?!(pre)|(\/pre))
或者
<(?!\/?pre)
group1(?!group2)
表示“group1
仅当以下部分不匹配时才匹配group2
(因此名称为“负前瞻”。这里group1
是<
,并且group2
是\/?pre
。
[...]
仅适用于单字符类。
所以[^(pre|/pre)]
不是这些字符中的任何一个:(pre|/pre)
或者,等效地,这些字符都不是:()(|/pre
因为括号并且在(据我记得)|
中没有任何含义)。[]
然后你说它应该是可选的?
,所以它不排除任何东西。
您可能想要前瞻:
\<(?!/?pre)
(?!...)
是负前瞻,如果下一个字符与括号内给出的模式不匹配,则“匹配”。
/?pre
是 的简化pre|/pre
。
这是一个很好的例子,说明为什么 RegEx 不是 HTML 的最佳主意。
无论如何,如果您选择忽略,这是您要使用的表达式(它还将处理 HTML 中有效的空格和大写字母)
<(?!(\/?\s*[Pp][Rr][Ee]))