Я ищу строку 3-431 a4-2 4-13
и хочу найти 3-431
, и 4-13
. Я использую следующий шаблон:Получите все вхождения между персонажами, чтобы получить тот же результат.
/(.*-.*)*/gU
и я получаю желаемый результат без проблем: Online demo
Вопрос заключается в том - как достичь такой же результат, когда я хочу, чтобы выглядеть внутри строки, которые начинаются и заканчиваются с некоторыми другие подстроки, например, [
и ]
.
Если я изменяю предмет по [3-431 a4-2 4-13 ]
и регулярному выражению до /\[(.*-.*)*\]/gU
, я получаю только последнее происхождение: 4-13
, и я не получаю таких же результатов, как в первом примере. Online demo
Почему это и как я могу это исправить?
Почему вы не используете split с ''? –
[Вы можете использовать '/ \ w + - \ w + /' для соответствия] (https://regex101.com/r/wG7uS3/1) – anubhava
Вы не сможете сделать это с помощью одного регулярного выражения. В PCRE количественные группы захвата получают перезапись каждого квантованного прохода, оставляя только последнее значение в группе. Я бы рекомендовал использовать конструкцию '\ G', но это связано с избыточным (дорогим) просмотром каждого совпадения. – sln