2013-05-29 56 views
3

什么正则表达式可以匹配字符串“war”在其前面没有字符串“soft”的情况?换句话说,“第三次世界大战”中的“战争”会匹配,但“我的软件在哪里”的“战争”不会?此外,“离开我的仓库”会匹配,所以会“知道”。换句话说,我只是不希望字符串“软件”匹配。匹配“war”但不匹配“software”

+0

您正在寻找消极的向前看。 – SLaks

+0

http://www.regular-expressions.info/lookaround.html – Kevin

+1

您需要告诉我们您期望的答案是哪种正则表达式引擎。 – Theo

回答

5

如果您的正则表达式引擎支持向后看:(?<!soft)war

你可以使用Perl试试吧:

$ perl -ne 'print if /(?<!soft)war/i' < my-text-file 

,将工作或多或少像grep(但grep不支持lookbehinds,据我所知)。

+1

@JohnFitzpatrick这是你正在寻找的答案。 – melwil

+0

这有效。如果我要求输入不区分大小写的版本,我会太需要吗? –

+0

当然,我已经更新了示例(这只是我在最后一个斜杠后)。 – Theo

1

试试这个:'[^ soft]。* war',它的接近但并不完美,放入你的字符串组合中,你会明白为什么,如果它唯一没有识别的'战争'它需要在单词前面加上至少一个字母,但它不能在“soft”前面使用你可以在你的程序中使用条件,并将这个逻辑与单词war的正则表达式相结合,这个单词不是任何subsstring的一部分,正如melwil指出的那样?

相关问题