2010-07-21 84 views
4

如何编写一个正则表达式,它将匹配以I开头的所有单词,但单词Integer除外?如何匹配以“I”开头但不是“Integer”一词的单词?

实施例:

t1: Integer; 
    t2: Interface; 
    t3: IXml; 

结果应该是InterfaceIXml

+0

它应该匹配单个“我”还是不匹配? – MikeD 2010-07-21 14:53:23

+0

无论如何,这里有很多微不足道的问题,而且这个问题有点棘手,因为你必须向前看,然后“重新消费”你看到的同样的信件。 – mquander 2010-07-21 14:54:21

+0

@ back2dos - 除了粗鲁和击败本网站的目的之外,所发布的一个答案清楚地表明,尽管并不困难,但解决方案与您声称的一样微不足道。 – adamk 2010-07-21 14:54:35

回答

4

这应该这样做:

I(?!nteger\b)\w+ 
+1

...虽然佩德罗,不幸的是,并没有指定他有哪种正则表达式。并非所有的正则表达式库都支持负向预测。 – 2010-07-21 14:56:16

+0

您应该删除\ w,因为它与de semicolumn不匹配;在例子中给出。 – Toto 2010-07-21 14:56:55

+0

@ M42:分号无意匹配。 – SilentGhost 2010-07-21 15:02:47

1

如果您不能使用作为SilentGhost建议先行断言,您可以使用基本的正则表达式表达了同样的语法:

I(\b|[A-Za-mo-z][A-Za-z]*|n(\b|[A-Za-su-z][A-Za-z]*|t(\b|[A-Za-df-z][A-Za-z]*|e(\b|[A-Za-fh-z][A-Za-z]*|g(\b|[A-Za-df-z][A-Za-z]*|e(\b|[A-Za-qs-z][A-Za-z]*|r[A-Za-z]+)))))) 
相关问题