正则表达式 - 如何匹配('a'或'em'或'strong')之后的字符'<'?

问题描述:

我怎么会让一个正则表达式的字符“<”匹配后面没有(“a”或“时间”或“强”)正则表达式 - 如何匹配('a'或'em'或'strong')之后的字符'<'?

所以<hello<string将匹配,但<strong不会。

更新:顺便说一句,我使用的语言是JavaScript

试试这个:

<(?!a|em|strong) 
+0

+1我认为它会为Perl兼容正则表达式语法。 (对于其他的语法,它可能是不同的) – 2010-04-25 01:00:41

+0

尝试过了,它的作品好,感谢 – Kyle 2010-04-25 02:00:51

+1

万一有人有兴趣,'?!'启动负前瞻。我在这里找到了一个很好的概览:http://www.rexegg.com/regex-lookarounds.html – schnatterer 2014-08-18 20:11:05

您使用negative lookahead,为此,最简单的形式是(这个问题):

<(?!a|em|strong) 

的一个问题与那就是它会忽略<applet>。处理这种情况的一种方法是使用\b,它是一个零宽度表达式(意思是它不捕获任何输入),它将单词与非单词或非单词到单词的过渡相匹配。单词字符是[0-9a-zA-Z_]。所以:

<(?!(a|em|strong)\b) 

如果您正则表达式引擎支持它,使用负前向断言:这看起来未来的字符串,并成功是否会不匹配;但是,它不会消耗任何输入。因此,您需要/<(?!(?:a|em|strong)\b)/:匹配<,然后成功,如果不存在aemstrong,然后是分词符\b

+0

关于单词中断的有趣点,尽管OP没有说明是否需要 – 2010-04-25 01:01:32

虽然安德鲁的回答显然更胜一筹,之前,我也得到了它与[^(?:a|em|strong)]工作。