2015-10-26 112 views
-1

誰能告訴我,爲什麼這個表達式:捕獲字符串的正則表達式結束

(<\s*script\s*>.*<\s*\/*script\s*>) 

匹配這一整條生產線:

<script> some more javascript</script>  ggg  <script> 
+2

沒有可用的鏈接 – benjamin

+0

它刪除了鏈接,不會讓我再添加它90分鐘:-(將它張貼在後來 –

+0

因爲您正在使用貪婪點匹配。使用'[\ s \ S] *?'或更適當的DOM解析器。 –

回答

1

你有兩個問題:

  1. 首先一個簡單的錯誤,您正在使用*量詞使得終端交換匹配0個或更多字符'/'。你可以通過刪除量詞來解決這個問題。 要求單個終止開關,將您的正則表達式更改爲:(<\s*script\s*>.*<\s*\/script\s*>)
  2. 但第二,因爲.*是貪婪的。這意味着它儘可能地抓住它,同時仍然匹配正則表達式的其餘部分。在這種情況下:<\s*\/*script\s*>。這意味着如果你有多個「... < \ script>」,它將匹配整行而不是每個「...」。

你想要的是匹配任何字符作爲次儘可能。這就是所謂的懶惰匹配。如果你實際使用http://www.regexr.com「參考」菜單中建立

(<\s*script\s*>.*?<\s*\/script\s*>) 

:您可以限定任何量詞與?做到這一點,在你的榜樣:

.*? 

使用您正則表達式將成爲你的正則表達式,你可以在「量詞和交替」>「懶惰」下找到它

1

通過\/更換\/*

\/*匹配或更多「/」。

相關問題