Если вы работаете с Java, у вас есть эта привычка, чтобы выровнять регулярное выражение, но вы должны знать, что PHP отличается таким образом: вам не нужно.
Причина, по которой ваше регулярное выражение возвращает пустой результат, заключается в том, что двигатель выполняется на самом первом этапе: (.*?)
.
Возможно, вы захотите изменить его на ([^(]+)(\(.*\))?
, который не использует ленивую или жадную точку квантора .
(останавливается в правильном положении). Если abc
часть всегда содержит символы слова [a-zA-Z0-9_]
, то есть лучший образец следовать: (\w+)\s*(\(.*\))?
Я не уверен, что используется u
модификатора юникода. Если вам это действительно нужно, добавьте его.
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)"
}
Live demo
в кавычки или скобки? – revo
@revo В круглых скобках. Tnx за внимание! –
'preg_match_all ("/([^ (] +) \\ s * (\\ (. * \\))?/U "," abc (test) \ nabc ", $ matches);' https: // 3v4l.org/FLB0S –