瞭解正則表達式
回答
^
匹配輸入的乞求。這匹配一個位置,而不是一個字符(將其視爲字符之間的空格)。
(?=)
這被稱爲超前測量。再次,這匹配一個位置。它匹配的位置是當前位置前面的文本等於給定文本的位置,但「指針」不會向前移動。想想它就像在前面偷看而不會彈出。
.*?il
匹配任何數字的任何字符(默認情況下除了換行符),後跟字符「il」。
.*?oh
和上面一樣,除了字符「哦」。
$
匹配輸入的結束。
基本上,這個正則表達式正在檢查輸入字符串是否包含字符「il」和「哦」。
比喻:
想一想這樣。你有一個人的陣容,你加強到第一人(^
)。然後,你一次向前看一個人,直到你找到一個戴着紅帽子的人,緊接着是一頂黃色的帽子。 ((?=.*?il)
)。你的眼睛飛回到陣容中的第一個人,然後重複搜索,除了這次你正在尋找一個戴紫色帽子的人,緊接着是一頂綠色帽子((?=.*?oh)
)。最後,你走過所有的人,把每個人從陣容中拉出來,直到你走到隊尾(.*$
)。如果在任何時候你找不到你要找的東西,你都會轉身離開房間(相當於返回錯誤)。否則,在陣容結束後,你會大喊「糖果!」 (相當於返回true)。
興趣點的:
的向前看符號使用什麼是所謂的「非貪婪」量詞(*?
)。這基本上是說「儘可能多的匹配,但不要多」。一個貪婪的量詞(*
)說「儘可能多的匹配」。如果已經使用了貪婪的量詞,這相當於將你的眼睛移動到陣容的後面,然後向前掃描,在第一場比賽中停止(如果從前面數起來,這將是陣容中的最後一場)。
如果您要刪除輸入錨的開始(^
),那麼這個表達式將容易遭受災難性的回溯。由於前瞻是基於位置匹配的,如果它不匹配,那麼它會嘗試前進一個字符並再次嘗試。 ^
將預覽鎖定在輸入中的第一個位置。如果他們無法從那個位置找到他們想要的東西,那麼他們就會失敗。
.*$
部分是絨毛。你可以在不影響表達式的情況下刪除它(編輯:嗯,實際上,如果你只是測試輸入,那麼就是這樣。你使用的是匹配結果,那麼你需要.*
來產生一個非零長度字符串)。但是,如果您要確保輸入的長度是一定的,則可以使用.{5,10}$
代替。這就好像在整個陣容中走動一樣,數着你拉出的人數,只喊「糖果!」如果您發現至少5人但不超過10人(備選方案:{5,}
- 至少5個字符,沒有上限; {,10}
- 不超過10個字符且沒有下限)。鑑於你正在尋找字符「il」和「哦」,已經有一個隱含的要求,即輸入至少4個字符(沒有上限)。
您可以使用http://gskinner.com/RegExr/幫助分析最正則表達式和測試他們對輸入數據。在互聯網上有這樣的一些工具。這個需要Flash。 (這不是賣點,只是信息。)
請注意,我提供的網址在正則表達式的標記維基頁面中提及。
總是很好的檢查維基。 :)但令人驚訝的是,它沒有[regular-expressions.info](http://www.regular-expressions.info/reference.html)。 (或者我可能錯過了) –
- 1. 瞭解正則表達式
- 2. 瞭解正則表達式
- 3. 瞭解正則表達式
- 4. 瞭解正則表達式?
- 5. 瞭解正則表達式
- 6. 瞭解正則表達式表達
- 7. 瞭解mod_rewrite和正則表達式
- 8. 瞭解這個正則表達式
- 9. 瞭解這個正則表達式
- 10. 瞭解Nutch正則表達式
- 11. 瞭解SpamAssassin HK_RANDOM正則表達式
- 12. 紅寶石:瞭解正則表達式
- 13. 瞭解java中的正則表達式
- 14. 瞭解以下正則表達式
- 15. 瞭解蟒蛇正則表達式
- 16. 解釋正則表達式
- 17. 正則表達式{}解析
- 18. 正則表達式理解
- 19. 正則表達式解決
- 20. 解碼正則表達式
- 21. 正則表達式解析
- 22. 正則表達式解釋
- 23. 正則表達式解釋
- 24. 正則表達式解釋
- 25. 解釋正則表達式
- 26. 正則表達式解析
- 27. 正則表達式(正則表達式)
- 28. 正則表達式(正則表達式)
- 29. 正則表達式(正則表達式)
- 30. 正則表達式正則表達式正則表達式使用正則表達式,但不是與Python
我建議你花幾分鐘閱讀[標籤信息](http://stackoverflow.com/tags/regex/info)。 –
[您應該查看關於JavaScript正則表達式的MDN](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions)。 – zzzzBov