匹配“战争”而不是“软件”

时间:2013-05-29 19:01:42

标签: regex grep

什么正则表达式会匹配前面没有字符串“soft”的字符串“war”的出现?换句话说,“第三次世界大战”中的“战争”会匹配,但“我的软件在哪里”的“战争”不会?此外,“远离我的仓库”将匹配,因此“意识到”。换句话说,我只是不希望字符串“软件”匹配。

2 个答案:

答案 0 :(得分:5)

如果你的正则表达式引擎支持lookbehinds:(?<!soft)war

您可以使用Perl尝试:

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

这或多或少会像grep一样(但是grep不支持lookbehinds,afaik)。

答案 1 :(得分:1)

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