“简单”正则表达式不起作用我想要它?

时间:2011-11-02 12:25:37

标签: php regex preg-match

我要做的是从这样的字符串中获取文本和网址:

  

这是一个标题[http://awebsite.com/a/download.zip]

这是我正在使用的正则表达式:

/(.*?)[(.*?)]/

我知道问题是什么......第一个(.*?)匹配整个字符串!但我不确定如何才能使它与第一个[出现相匹配。

解释我做错了什么以及如何修复将是非常感谢你。我最终学习正则表达式!

谢谢你们

PS:使用php和preg_match函数。

4 个答案:

答案 0 :(得分:3)

你的问题不是第一部分而是第二部分。

你必须逃避[像这样:

/(.*?)\[(.*?)]/

说明:

    "
(       # 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
"

答案 1 :(得分:2)

[(.*?)]是一个字符类,匹配以下内容之一:'(''.''*''?'')'

您需要转义[,使其与文字'['匹配(而]并不特殊,因此不需要转义。)

/(.*?)\[(.*?)]/

请参阅:http://www.regular-expressions.info/charclass.html

答案 2 :(得分:2)

你几乎得到了它,但是试着逃避分组字符[和],所以你会得到:

/(.*?)\[(.*?)\]/

答案 3 :(得分:1)

您需要转义[]个字符:

/(.*?)\[(.*?)\]/