我有两种表达方式:
我希望能够捕获主要文本和解释[在括号中],如果存在。
我正在尝试使用以下正则表达式:
preg_match("/(.*?)\\s*(\\(.*\\))*/u", $text, $matches);
但它不起作用。 如何使其有效?
答案 0 :(得分:1)
如果你来自Java,你就有这个习惯来对正则表达式进行字符串化,但你应该知道PHP有这样的不同之处:你不需要。
你的正则表达式返回空结果的原因是引擎在第一步就满意了:(.*?)
。
您可能希望将其更改为([^(]+)(\(.*\))?
,它不会使用懒惰或贪婪的点.
量词(停在正确的位置)。如果abc
部分始终包含单词字符[a-zA-Z0-9_]
,则可以使用更好的模式:(\w+)\s*(\(.*\))?
我不确定使用的u
unicode修饰符。如果你真的需要它,那就添加它。
preg_match("/(\w+)\s*(\(.*\))?/", "abc (explanation)", $matches);
var_dump($matches);
输出:
array(3) {
[0]=>
string(17) "abc (explanation)"
[1]=>
string(3) "abc"
[2]=>
string(13) "(explanation)"
}
答案 1 :(得分:0)
试试此代码
preg_match("/.*?\s*(\(.*?\))*$/u", $text, $matches)