У меня есть строка со следующим «допустимым» шаблоном, который повторяется несколько раз: определенная группа символов, скажем «ab», любое количество других символов, скажем «xx», другая конкретная группа символов, скажем«cd», любое количество других символов, скажем «xx».
Итак, допустимая последовательность будет такой: «abxcdabxxcdabxcdxx»
Я пытаюсь обнаружить недопустимые последовательности этой конкретной формы:«abxxcdxxcd» и удалите средний «cd», чтобы сделать его действительным: «abxxxxcd»
Я пробовал следующее регулярное выражение:
/(?<=ab).*(cd).*(?=ab)/gsU
Это работает для одной последовательности, но этопроисходит сбой для следующей строки: «abxx cd xcdxxabxcdxxabx cd xxcd», которая содержит недопустимую последовательность, за которой следует допустимая последовательность, за которой следует другая недопустимая последовательность.Я хочу, чтобы обе группы были выделены жирным шрифтом.
Обратите внимание, что другие символы "xx" могут содержать что угодно, включая разрывы строк.Однако они никогда не будут содержать строки «ab» или «cd», за исключением указанного мной неверного регистра.
Вот соответствующая ссылка regex101: https://regex101.com/r/U9pRfo/1
Редактировать:
Ответ Виктора сработал для меня.Однако я получал PREG_JIT_STACKLIMIT_ERROR в php при использовании этого регулярного выражения для очень большой строки.В итоге я просто разбил эту строку на более мелкие части и перестроил строку после, что сработало отлично.