регулярное выражение — переполнение стека совпадений RegExp

Данные:

N15319542045C13_1_3/61488007C13-130083_1_3/61488007C13-130083-1_1_3/P1197443641_1_3SD|1
NP1196939393_1_3SU|OD=2/7;|BNP1196939393_1_3SU|OD=2/7;|BNP1196930222_1_3SU|OD=4/11;|
NP1196930222_1_3SU|OD=4/11;|
N15319384625C13_1_3/61445794C13-130077_1_3SD||BN15319384625C13_1_3/61445794C13-130077_1_3SD||

RegExp:

(N(.*?)S([UID])\|(.*?))(?:B|\|.?$)

Я пытаюсь найти 7 совпадений, используя приведенное выше регулярное выражение, но только 6 совпадают. Не уверен, как исправить, чтобы соответствовать 1-й линии, а также.

Формат:

N(key)S(action)|(value or end)

конец зависит от разных совпадений

Я решил это, если кому-то еще нужно:

(\x15(.*?)\x01([UID])\|(.*?))(?:.*?\x08|.*\|?$)

0

Решение

Регулярное выражение не работает, потому что после S[UID] вы ожидаете 2 | согласно регулярному выражению, но в первой входной строке есть только один.

Одно из исправлений — сделать вторую группу необязательной и убрать привязку конца строки $

(N(.*?)S([UID])\|(.*?))(?:B|\|.?)?$

Regex Demo


Или может быть проще как

N.*?S[UID]\|.*$

Regex Demo

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]