正则表达式 - 如何匹配('a'或'em'或'strong')之后的字符'<'?
问题描述:
我怎么会让一个正则表达式的字符“<”匹配后面没有(“a”或“时间”或“强”)正则表达式 - 如何匹配('a'或'em'或'strong')之后的字符'<'?
所以<hello
和<string
将匹配,但<strong
不会。
更新:顺便说一句,我使用的语言是JavaScript
答
试试这个:
<(?!a|em|strong)
答
您使用negative lookahead,为此,最简单的形式是(这个问题):
<(?!a|em|strong)
的一个问题与那就是它会忽略<applet>
。处理这种情况的一种方法是使用\b
,它是一个零宽度表达式(意思是它不捕获任何输入),它将单词与非单词或非单词到单词的过渡相匹配。单词字符是[0-9a-zA-Z_]
。所以:
<(?!(a|em|strong)\b)
答
如果您正则表达式引擎支持它,使用负前向断言:这看起来未来的字符串,并成功是否会不匹配;但是,它不会消耗任何输入。因此,您需要/<(?!(?:a|em|strong)\b)/
:匹配<
,然后成功,如果不存在a
,em
或strong
,然后是分词符\b
。
+0
关于单词中断的有趣点,尽管OP没有说明是否需要 – 2010-04-25 01:01:32
答
虽然安德鲁的回答显然更胜一筹,之前,我也得到了它与[^(?:a|em|strong)]
工作。
+1我认为它会为Perl兼容正则表达式语法。 (对于其他的语法,它可能是不同的) – 2010-04-25 01:00:41
尝试过了,它的作品好,感谢 – Kyle 2010-04-25 02:00:51
万一有人有兴趣,'?!'启动负前瞻。我在这里找到了一个很好的概览:http://www.rexegg.com/regex-lookarounds.html – schnatterer 2014-08-18 20:11:05