RegExp Match PHP

Данные:

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|.*\|?$)

person Wasim A.    schedule 17.01.2017    source источник
comment
(\ x15 (. *?) \ x01 ([UID]) \ | (. *?)) (?:. *? \ x08 |. * \ |? $)   -  person Wasim A.    schedule 17.01.2017


Ответы (1)


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

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

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

Regex Demo


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

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

Regex Demo

person nu11p01n73R    schedule 17.01.2017
comment
Если вы просто ищете N, за которым следует S, за которым следует действие, вы можете упростить задачу. Взгляните на правку, которую я добавил. Надеюсь, это поможет - person nu11p01n73R; 17.01.2017
comment
извините, мои данные не заканчиваются на B, я изменил свой вопрос и данные, чтобы они совпадали. Теперь его возвращают 6 совпадений, но он должен вернуть 7 - person Wasim A.; 17.01.2017
comment
Могут ли несколько NS * встречаться в одной строке? - person nu11p01n73R; 17.01.2017
comment
да, подумайте, я извлекаю команды из данных. иногда несколько команд находятся в одной строке. - person Wasim A.; 17.01.2017
comment
В этом случае мы не можем использовать $, так как строка не заканчивается шаблоном, который мы ищем. Также в этом случае нам нужно больше описания, чтобы определить, чем заканчивается каждая из этих данных. - person nu11p01n73R; 17.01.2017
comment
Давайте продолжим это обсуждение в чате. - person Wasim A.; 17.01.2017