我想要做的就是文字和網址進行這樣的字符串:「簡單」的正則表達式不工作,我想如何?
這是一個標題[http://awebsite.com/a/download.zip]
這是我使用正則表達式:
/(.*?)[(.*?)]/
我知道是什麼問題...第一(.*?)
是匹配整個字符串!但我不確定如何才能使它匹配到第一個[
發生。
解釋我做錯了什麼,以及如何解決將是很好的謝謝你。我將最終學習正則表達式!
謝謝你們
PS:使用PHP和preg_match
功能。
我想要做的就是文字和網址進行這樣的字符串:「簡單」的正則表達式不工作,我想如何?
這是一個標題[http://awebsite.com/a/download.zip]
這是我使用正則表達式:
/(.*?)[(.*?)]/
我知道是什麼問題...第一(.*?)
是匹配整個字符串!但我不確定如何才能使它匹配到第一個[
發生。
解釋我做錯了什麼,以及如何解決將是很好的謝謝你。我將最終學習正則表達式!
謝謝你們
PS:使用PHP和preg_match
功能。
[(.*?)]
是一個字符類和匹配之一:'('
,'.'
,'*'
,或'?'
')'
。
您需要轉義[
,使它與文字'['
匹配(並且]
不是特殊的,因此它不需要轉義)。
/(.*?)\[(.*?)]/
感謝您的解釋:)有道理。 –
不客氣托馬斯。 –
你幾乎得到了它,但儘量逃避分組字符[和],所以你會得到:
/(.*?)\[(.*?)\]/
你的問題不是第一部分而不是第二部分。
你必須逃離[這樣的:
/(.*?)\[(.*?)]/
說明:
"
( # Match the regular expression below and capture its match into backreference number 1
. # Match any single character
*? # Between zero and unlimited times, as few times as possible, expanding as needed (lazy)
)
\[ # Match the character 「[」 literally
( # Match the regular expression below and capture its match into backreference number 2
. # Match any single character
*? # Between zero and unlimited times, as few times as possible, expanding as needed (lazy)
)
] # Match the character 「]」 literally
"
']'不會被轉義。 –
@BartKiers:O不知道這一點。我猜是因爲它不可能是角色課的結束? – FailedDev
只有當正則表達式引擎在它之前遇到'['''''''''''''''。所以如果沒有遇到'['',''''將會匹配'']'''儘管如此,它並沒有傷害。 –
你需要逃避[]
字符:
/(.*?)\[(.*?)\]/
'''不需要轉義。 –
@BartKiers:是的,你是對的,這是我的習慣。 – Toto
好吧,這不是一個壞習慣。它不會因爲逃避而受到傷害,並且有很多人在看到一個非轉義的']'時會感到困惑......當我看到一個轉義的'''時,我只是感到困惑,因爲我認爲']'被放置了在一個字符類中,像這樣:'[a \] b]',它匹配''a','']'或''b''。 –
參見[有像開源世界中的RegexBuddy一樣?](http://stackoverflow.c在這個開放源代碼世界中)和['/(.*?)[(.*?)]/'visualized](http:/ /是什麼意思? /www.strfriend.com/vis?re=%2F%28.*%3F%29%5B%28.*%3F%29%5D%2F) – mario