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