我想使用 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]))