Как получить перекрывающиеся совпадения с помощью сложных регулярных выражений и Preg_Match_All в PHP - PullRequest
0 голосов
/ 14 июня 2019

Прочитал следующее, что имеет некоторое совпадение (каламбур!) С проблемой, с которой я сталкиваюсь: preg_match_all, как получить * все * комбинации?Даже перекрывающиеся Перекрывающиеся совпадения с preg_match_all и шаблоном, заканчивающимся повторяющимся символом

Однако я не знаю, как применить их ответы к моей проблеме, которая немного сложнее.

Мое регулярное выражение, которое я использую с preg_match_all ():

/.{240}[^\[]Order[^ ][^\(].{9}/u

Со следующей строкой:

56A.  Subject to the provisions of this Act, any decision of the Court or the Appeal Board shall be final and conclusive, and no decision or order of the Court or the Appeal Board shall be challenged, appealed against, reviewed, quashed or called into question in any court and shall not be subject to any Quashing Order, Prohibiting Order, Mandatory Order or injunction in any court on any account.[20/99; 42/2005]

Я хотел, чтобы оно совпадало ровно 3 раза.Первый матч имеет «порядок отмены» за 9 символов до конца.Второй матч имеет «Запрещающий порядок» за 9 символов до конца.Третий матч имеет «Обязательный порядок» за 9 символов до конца.

Однако, как и ожидалось, он соответствует только первому, поскольку ожидаемые совпадения перекрываются.

Я применил то, что прочитал вдругие посты, я попробовал это:

(?=(.{240}[^\[]Order[^ ][^\(].{9}))

Я все еще не получаю то, что мне нужно.

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 14 июня 2019

Вам нужно будет использовать положительное предварительное утверждение для .{240}, точно так же, как найденный ответ предлагает использовать положительное предварительное утверждение для .{9}:

/(?<=.{240})[^\[]Order[^ ][^\(](?=.{9})/u

Это RE соответствуетВаша строка только дважды из-за [^ ], как сказал @bobblebubble.Отрегулируйте эту часть при необходимости.

...