正则表达式中的string1或string2?

时间:2017-07-06 17:37:01

标签: regex perl

在下面的示例中,我尝试强制匹配结束" .flv"或" .mp4"。这就是\b存在的原因。

然而,由于某种原因,订单很重要。现在它正确地输出flv链接,但任何链接与" mp4"最后打印为mp4

perl -ne 'print "$1\n" if /(http[^\s]*\.\bflv\b|\bmp4\b)/' test.html

如何获得真实的.flv.mp4

1 个答案:

答案 0 :(得分:2)

正确的分组,正则表达式应该是:

/\b(http\S+\.(?:flv|mp4))\b/

在正则表达式http中,点在flv之前匹配,但在mp4之前不匹配。您的正则表达式执行为http[^\s]*\.\bflv\b\bmp4\b

此外,由于点被视为非单词字符,因此无需在点后匹配\b。您只需在\b.flv之后匹配.mp4即可。另外,最好在\b之前匹配http

另请注意使用\S代替[^\s]