Regex 正则表达式-按特定顺序匹配字符串

Regex 正则表达式-按特定顺序匹配字符串,regex,Regex,我需要一个正则表达式,它将以特定的顺序匹配多个字符串,并用任何东西(包括换行符)分隔 因此,如果这3个字符串是cat, 如果需要,可以使用perl 下面是使用Perl实现的方法 被任何东西隔开,包括换行符 在Perl中,使用的修饰符s来匹配包括换行符在内的任何内容(此修饰符表示作为单行进行匹配) 因此,您可以通过以下方式匹配输入:m/*cat.*dog.*bird.*s 这是源代码,其输出是匹配的: #!/bin/perl -W $content = " cat abcd abc dog ab

我需要一个正则表达式,它将以特定的顺序匹配多个字符串,并用任何东西(包括换行符)分隔

因此,如果这3个字符串是
cat

如果需要,可以使用perl

下面是使用Perl实现的方法

被任何东西隔开,包括换行符

在Perl中,使用
的修饰符
s
匹配包括换行符在内的任何内容(此修饰符表示作为单行进行匹配)

因此,您可以通过以下方式匹配输入:
m/*cat.*dog.*bird.*s

这是源代码,其输出是匹配的:

#!/bin/perl -W

$content = " cat abcd
abc dog abc
bird";

print "matches\n" if ($content =~ m/.*cat.*dog.*bird.*/s);

我不知道你在哪里找到lookaheads,因为它们通常比regex中的基本特性更复杂。。。根据您提供的信息,我将使用以下哪种方法完成您的任务:

\bcat\b.*?\bdog\b.*?\bbird\b

确保“正则表达式”和“正则表达式”。“匹配换行符”都已选中,并且光标位于文件的开头


我使用的
\b
是为了确保您所说的单词匹配。它们确保单词前面或后面没有其他单词字符(因此
cat
将匹配,但
cats
将不匹配)。

您可能需要这样的东西:

它只匹配一只猫,之后只匹配一只狗,然后只匹配一只鸟


借助于否定前瞻断言

您想匹配包含“cat”和“bird”的整行还是只将它们用作开始/结束点?关于:
cat[。\n]+?dog[。\n]+?bird
Mateen Ulhaq,匹配整行或只是开始/结束点都可以,同样是cat[。\n]+?dog[。\n]+?bird在regexr.com上没有生成匹配项您的最后一个示例不应该是match?我说的对吗?@k-five,没错,最后一个例子不应该匹配。Jerry,谢谢你的回答,但是请看编辑,因为搜索词可能不受单词边界的限制。还有,有没有办法让它在我测试它的regexr.com上跨行运行?@GlenYates好的,那么我想你可以删除它们。我在结尾添加了这个描述,这样你就可以自己修改它,如果你不需要它们的话^^^而且我不喜欢regexr,它没有我认为它应该拥有的所有东西。我使用regex101.com,在那里我可以使用
s
标志使
匹配换行符,并且那里有一个新的功能,叫做单元测试,自从我上次使用它以来,它被添加了,看起来很有用!XD,请看我最后一次希望的编辑,我不能明确地指出最后一个搜索词的中间部分,即“代码> CAT @ GlenYates Ah,我刚才看到了你的评论。Welp,现在太晚了。这已经越来越近了,但是还有另外两个案例不起作用,
猫-狗-猫-鸟
猫-狗-狗-鸟
。也许更清楚的是,我不能在猫和鸟之间有一只狗(或多只狗),不管狗和鸟之间是否存在其他猫。请注意,我已经放弃了使用正则表达式来解决这个问题,我将编写代码。它们是什么?此处的评论澄清我的上述评论,当我说“我不能在猫和鸟之间养一只狗(或多只狗)”,我的意思是我想检测这种情况,因此它应该是匹配的。@GlenYates我不确定是否能很好地理解你。所以它应该在一只猫和一只鸟之间匹配多只狗?如果不是这样,请在你的问题中添加任何可能性。基本上是的,但另外狗和鸟之间存在1-n只猫应该仍然会导致匹配,因此我们有:
猫-狗-鸟
猫-狗-狗-鸟
,和
猫-狗-猫-狗-鸟
都应该匹配。
\bcat\b.*?\bdog\b.*?\bbird\b