“简单”的正则表达式不工作,我想如何?
我想要做的就是文字和网址进行这样的字符串:“简单”的正则表达式不工作,我想如何?
这是一个标题[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