У меня проблемы с совпадением [*], который иногда бывает, а иногда нет. У кого-нибудь есть предложения?PHP - Preg_match_all необязательный матч
$name = 'hello $this->row[today1][] dfh fgh df $this->row[test1] ,how good $this->row[test2][] is $this->row[today2][*] is monday';
echo $name."\n";
preg_match_all('/\$this->row[.*?][*]/', $name, $match);
var_dump($match);
выход: привет $ this-> строка [тест], как хорошо $ this-> строка [test2] составляет $ this-> строка [сегодня] [*] является понедельником
array (
0 =>
array (
0 => '$this->row[today1][*]',
1 => '$this->row[test1] ,how good $this->row[test2][*]',
2 => '$this->row[today2][*]',
),
)
Теперь совпадение [0] [1] берет слишком много, потому что оно соответствует до следующего «[]», а не заканчивается на «$ this-> row [test]». Я предполагаю, что [*]/добавляет шаблон. Как-то нужно проверить, есть ли следующий символ [перед сопоставлением с []. Кто угодно?
Благодаря
попробовать '/ (\ $ this-> Строка \ (\ [^ \)] * \))/' – Orangepill
попробуйте это, preg_match_all ('/\$this->row(\[.*?\])(\[\*\])?/', $ name, $ match); – Nightmare
оба они не соответствуют – Karassik