1

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

在此处输入图像描述

4

3 回答 3

1

这将取决于正则表达式引擎。如果它支持带有负前瞻断言的 Perl 正则表达式,你可以这样做

<(?!(pre)|(\/pre))

或者

<(?!\/?pre)

group1(?!group2)表示“group1仅当以下部分不匹配时才匹配group2(因此名称为“负前瞻”。这里group1<,并且group2\/?pre

于 2013-04-26T17:58:22.960 回答
0

[...]仅适用于单字符类。
所以[^(pre|/pre)]不是这些字符中的任何一个:(pre|/pre)
或者,等效地,这些字符都不是:()(|/pre
因为括号并且在(据我记得)|中没有任何含义)。[]

然后你说它应该是可选的?,所以它不排除任何东西。

您可能想要前瞻:

\<(?!/?pre)

(?!...)是负前瞻,如果下一个字符与括号内给出的模式不匹配,则“匹配”。

/?pre是 的简化pre|/pre

于 2013-04-26T17:58:29.767 回答
0

这是一个很好的例子,说明为什么 RegEx 不是 HTML 的最佳主意。

无论如何,如果您选择忽略,这是您要使用的表达式(它还将处理 HTML 中有效的空格和大写字母)

<(?!(\/?\s*[Pp][Rr][Ee]))
于 2013-04-26T18:14:27.877 回答