我需要一个正则表达式,它将按特定顺序匹配多个字符串,这些字符串由包括换行符在内的任何内容分隔。
因此,如果3个字符串为cat
,<dog
,</bird>
则为:
cat abcd
abc <dog abc
</bird>
匹配,但
cat abcd
abc </bird> abc
<dog
没有。
编辑:还有一个例子:
catabcd
abc <dog abc
</bird>
以及搜索字词未被字边界分隔的任何此类变体也应匹配。
最后一个例子,它应该是贪婪的:
cat abcd
</bird>
<dog
<dog
cat
</bird>
不匹配。
我试过前瞻:
(?=.*?cat)(?=.*?dog)(?=.*?bird).*
但这不会强制执行顺序(此特定示例仅适用于一行)。
注意:我使用的是notepad ++,但如果需要可以使用perl。
答案 0 :(得分:1)
可以在必要时使用perl
以下是使用Perl的方法。
由包括换行符在内的任何内容分隔
在Perl中,使用s
的修饰符.
来匹配任何内容,包括换行符(此修饰符表示匹配为单行)。
因此,您可以通过以下方式匹配输入:m/.*cat.*dog.*bird.*/s
。
这是源代码,其输出为matches
:
#!/bin/perl -W
$content = " cat abcd
abc dog abc
bird";
print "matches\n" if ($content =~ m/.*cat.*dog.*bird.*/s);
答案 1 :(得分:1)
我不确定你在哪里找到了前瞻,因为它们通常比正则表达式中的基本功能更难理解......根据你提供的信息,我会将它用于你的任务:
\bcat\b.*?\bdog\b.*?\bbird\b
确保'正则表达'和'。匹配换行符'都被选中,并且你的光标位于文件的开头。
我使用的\b
是为了确保您声明的字词匹配。他们确保单词不在前面,也不在后面加上另一个单词字符(以便cat
匹配,但cats
不会。)
答案 2 :(得分:1)