Как я могу добавить необязательный шаблон проверки в preg_match? - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь использовать preg_match для разбора строки.Но, не удалось получить результат правильно.

Я хочу проанализировать эти строки с необязательным // char.

Основная идея заключается в том, что некоторые строки могут содержать // 0016OIXXXXXXX (// 4 цифрыи 9 стр.), а некоторые строки могут не содержать (// 4 цифры и 9 стр.).

Следующая строка \n обязательна.

Вот несколько строк выборки;

Строка 1

1812121212DD2220,31NTRFNONREF 502?102330

Строка 2

1811091109CD20693,12NTRFRMSOIC110871941//0016RFXXXXXXX 206?000801

Вот мой паттен;

/(\d{6})((\d{2})(\d{2}))?(C|D)([A-Z]?)([0-9,]{1,15})([A-Z]{1,4})([A-Z a-z 0-9]{1,16})(\/\/)([0-9A-Z]{1,16})(\s*\n)([0-9]{1,3})(\?)([0-9]{0,6})/

Текущий паттен может работать только с //.Если без //, паттен не работает и не может разобрать строку.

Я не знаю, как мне добавить (\/\/)([0-9A-Z]{1,16}) в качестве дополнительного патента.

Заранее спасибо :)

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Просто сделайте дополнительную часть хорошо ... необязательной:

\d{6}(?:\d{4})?[CD][A-Z]?[0-9,]{1,15}[A-Z]{1,4}[A-Za-z0-9 ]{1,16}(?:\/\/[0-9A-Z]{1,16})?\s*\n[0-9]{1,3}\?[0-9]{0,6}
//                                                               ^^^^^^^^^^^^^^^^^^^^^^^

Я удалил группы захвата для упрощения, если вы действительно хотите сохранить их:

(\d{6})((\d{2})(\d{2}))?(C|D)([A-Z]?)([0-9,]{1,15})([A-Z]{1,4})([A-Za-z0-9 ]{1,16})(?:(\/\/)([0-9A-Z]{1,16}))?(\s*\n)([0-9]{1,3})(\?)([0-9]{0,6})

DEMO

0 голосов
/ 12 декабря 2018

Если я правильно понял ваш вопрос.

Пожалуйста, попробуйте использовать выражение or между группами и подтвердить любой ваш случай.Например,

`(pattern1) | (pattern-2) | ( (pattern3) | (pattern 4)  )`

Пожалуйста, попробуйте использовать выражение |.

...