在下面的示例中,我尝试强制匹配结束" .flv"或" .mp4"。这就是\b
存在的原因。
然而,由于某种原因,订单很重要。现在它正确地输出flv链接,但任何链接与" mp4"最后打印为mp4
。
perl -ne 'print "$1\n" if /(http[^\s]*\.\bflv\b|\bmp4\b)/' test.html
如何获得真实的.flv
或.mp4
?
答案 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]