2011-11-15 15 views
0

我使用這個正則表達式:正則表達式語句不包括滿弦

\b(((\S+)?)(@|mailto\:|(news|(ht|f)tp(s?))\://)\S+)\b 

到這個文本字符串匹配(是的,它包括轉義的HTML):

< ahref="http://www.somesite.com/" target="_blank"> 

但是當我運行它快報(或任何其他正則表達式程序),所有我檢索是:

ahref="http://www.somesite.com 

我需要整個字符串,包括<target="_blank">

我在正則表達式中錯過了什麼來完成這項工作?

+1

不要使用正則表達式解析HTML代碼。 – m0skit0

+0

你的問題是不完整的,也是關閉的候選人。現在,*是正確的,但我100%肯定你不想要這個。 – FailedDev

+1

如果你想使用正則表達式來解析HTML(哪*是*可能),請先閱讀本文:http://stackoverflow.com/questions/4284176/doubt-in-parsing-data-in-perl-where-我錯了/ 4286326#4286326 –

回答

1

「我在正則表達式中錯過了什麼來完成這項工作?」
<[\s\S]*?\b(((\S+)?)(@|mailto\:|(news|(ht|f)tp(s?))\://)\S+)\b[\s\S]*?>

+0

謝謝。我想出了一個臨時解決方案,但這看起來更好。我很感激。 :) –

1

讀你的正則表達式,你找兩個斷字之間的事情(即空白或者啓動/行末等);那麼除了空白之外的任何內容,以及任何看起來像是URI直到下一個單詞中斷爲止的任何內容,所以你的模式明確地尋找一些不包含你所說的空白的東西。

+0

我看到\ S正在造成這種情況。 S的另一個特點是什麼? –

+1

'\ s'是任何空格; '\ S'是除空格之外的任何東西 - 根據需要隨意添加額外的組。 –

+0

因此,添加\ s代替\ S無法匹配任何內容。你可以通過添加更多的組來解釋你的意思嗎? –