Вы не получаете ожидаемый результат, потому что ваш селектор |
соответствует номеру матча $2
, поэтому вы не получаете правильное значение во втором матче. Но если изменить регулярное выражение, чтобы соответствовать оба варианта в одном регулярном выражении, то вы получите ожидаемый результат:
(<[ZY]{4}>\s(.*))
мне пришлось удалить \r
в конце строки (можно использовать многострочный флаг для этого) и ?
в (.*)
блоке (* говорит 0 или много вхождений, поэтому нет необходимости).
fiddle around here Вы можете
Вы должны использовать глобальную (г) модификатор, когда вы хотите, чтобы это пробегать весь текст.
Объяснение Селектор [ZY]
будет выбрать либо Z или Y. В {4}
состояний, которые вы ожидаете ровно 4 повторений селектора перед тем, так ZZZZ или YYYY. (.*)
не нуждается? потому что *
уже выбирает none или многие.
Что вы пытаетесь достичь? Каков ваш ожидаемый результат? –
Я предполагаю, что причина '\ r'. Используйте '[\ r \ n]'. https://regex101.com/r/uH5hS4/1 и http://regexstorm.net/tester?p=(%3cZZZZ%3e%5cs(.*%3f)%7c%3cYYYY%3e%5cs(.* % 3f))% 5BR% 5cn% 5d & я =% 3cZZZZ% 3e + AV% 0D% 0A% 3casdd% 3e + 122% 0D% 0A% 3cxcxzc% 3e + а% 0D% 0A% 3casas% 3e + ES% 26% 0d% 0a% 3cwewa% 3e + п% 0D% 0A% 3czasd% 3e + Cu. –
Я думаю, вам нужно добавить конец строки anchor '( \ s (. *?) | \ s (. *?)) $', Https://regex101.com/r/dN9xQ0/1 –