PHP: Как получить все совпадения регулярных выражений? - PullRequest
4 голосов
/ 02 сентября 2010

Возможно ли получить все совпадения регулярных выражений в PHP? Мне нужен скрипт, который, например, будет соответствовать .+ в abc и даст результат:

Array (a, b, c, ab, bc, abc)

Ответы [ 3 ]

1 голос
/ 12 декабря 2012

Проблема в перекрытии, вы хотите сопоставить 'ab' и 'bc', что вы не сможете сделать с помощью простого регулярного выражения Однако учтите следующее.

Вы можете разделить каждый символ одной из следующих строк:

preg_match_all('/./', 'abc', $matches);
str_split('abc');

Даю вам: массив ('a', 'b', 'c').

И следующее разделит пары символов с оставшимся одним символом:

preg_match_all('/.{2}|./', 'abc', $matches);

Даю вам: массив ('ab', 'c');

Так что вы можете поиграть с комбинациями / вариациями, чтобы достичь своего результата.

1 голос
/ 02 сентября 2010

Я не уверен, что в регулярном выражении есть определенный набор "всех совпадений".

Например, что если ваш шаблон был .+.+?Что соответствует первому .+?Что сопоставляется вторым?

Строка может соответствовать определенной привязке RE несколькими различными способами, и какая подстрока захватывается различными частями RE, может зависеть от таких вещей, как жадное или не жадное сопоставление.Но не существует определенного способа перебора всех возможных возможных захватов.Для этого вам придется резко изменить способ обработки RE.

0 голосов
/ 12 декабря 2012

Я знаю, что вопрос устарел, но все же может быть кто-то, кому нужен ответ.

Посмотрите на параметр flags для preg_match_all function

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...