2010-04-25 84 views

回答

32

试试这个:

<(?!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

7

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

<(?!a|em|strong) 

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

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

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

+0

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

2

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