另一个正则表达式困境,我希望找到包含.cc和.h扩展名的所有X文件,其中不包含pb字。
Example:
Foo.cc
FooTest.cc
Bar.cc
Bar.pb.cc
Bar.pb.h
Regex result:
Foo.cc
FooTest.cc
Bar.cc
答案 0 :(得分:3)
使用以下内容:
^((?!pb).)*\.(cc|h)$
(?!pb)
是一个负面预测,可以匹配pb
未跟随的任何位置。因此((?!pb).)*
将匹配任何不包含pb
的子字符串。完整的正则表达式可以描述为匹配整个字符串,只要它以'.cc'或'.h'结尾,并且扩展名之前的子字符串不包含'pb'。
注意如果您想匹配多行字符串,则需要将(?m)
修饰符添加到使^
和$
工作的正则表达式中在每一行而不是整个字符串。如果您的lang不支持修饰符,请使用基于您使用的函数的标记。
答案 1 :(得分:2)
您可以尝试以下基于正面表达式的负面预测。
^(?!.*?\bpb\b).*\.(?:cc|h)$
(?!.*\bpb\b)
否定前瞻断言要匹配的字符串不会包含单词pb
。如果没有pb
,则只有它会尝试匹配字符串,并且该字符串必须具有cc
或h
扩展名。