2017-07-06 50 views
0

在下面的示例中,我嘗試強制匹配以「.flv」或「.mp4」結尾。這就是爲什麼\b在那裏。正則表達式中的string1或string2?

但是,由於某種原因,訂單很重要。現在它正確地輸出flv鏈接,但是最後的任何帶有「mp4」的鏈接都被打印爲mp4

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

我怎樣才能得到一個真正的.flv.mp4

+0

我們一個或'\。(FOO |巴)' – epascarello

+0

@epascarello不會Perl中把它看作另一個緩衝區? –

回答

2

有了正確的分組,正則表達式應該是:

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

在您的正則表達式httpflv前點是匹配的,但不是MP4了。您的正則表達式被執行爲http[^\s]*\.\bflv\b\bmp4\b

此外,由於點被認爲是非單詞字符,因此不需要匹配點後的\b。您只需在.flv.mp4之後匹配\b。在http之前也最好匹配\b

還要注意使用\S代替[^\s]

相關問題