我想在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>
答案 0 :(得分:1)
这取决于正则表达式引擎。如果它支持negative lookahead assertions的Perl正则表达式,则可以执行
<(?!(pre)|(\/pre))
或
<(?!\/?pre)
group1(?!group2)
表示只有当以下部分与group1
不匹配时才匹配group2
(因此名称为“负向前瞻”。此处group1
为<
},group2
是\/?pre
。
答案 1 :(得分:1)
Here's一个可爱的例子,说明为什么RegEx不是HTML的最佳选择。
无论如何,如果你选择忽略,这里是你想要使用的表达式(它还将处理HTML中有效的空格和大小写)
<(?!(\/?\s*[Pp][Rr][Ee]))
答案 2 :(得分:0)
[...]
仅适用于单字符类
因此[^(pre|/pre)]
不代表任何这些字符:(pre|/pre)
或者,等效地,没有这些字符:)(|/pre
(因为括号和|
在[]
中没有任何意义(据我所记))。
然后你说它应该是?
的可选项,因此它不会排除任何内容。
你可能想要预见:
\<(?!/?pre)
(?!...)
为负面预测,如果下一个字符不与括号内给出的模式匹配,则“匹配”。
/?pre
是pre|/pre
的简化。