Perl Добавление двух регулярных выражений одновременно - PullRequest
0 голосов
/ 19 сентября 2019

Это для сценария perl, я хочу поместить два регулярных выражения в один и тот же атрибут шаблона. Первое регулярное выражение должно ввести
цифру {2,4}, два или четыре одинаковых в следующем диапазоне.

exmaple whiteпробел 1 1111 123

пример с вертикальной чертой (|) 1 | 1111 | 123

Здесь регулярное выражение для пробелов работает только отлично

if($msg{'what'} =~ /\cmd\s(\d{2,4})\s(\d{4,6})\s(\d{3,4})/)

с двумя шаблонами \с и |он не работает.

if($msg{'what'} =~ /\cmd\s(\d{2,4})\s?\|(\d{4,6})\s?\|(\d{3,4})/)

желаемый результат - получить результат с помощью пробела или вертикальной черты в одной строке регулярного выражения.

1 | 1111 | 123 или 1 1111 123

1 Ответ

0 голосов
/ 20 сентября 2019

Ваше регулярное выражение

/(\d{1,4})\s?\|(\d{4,6})\s?\|(\d{3,4})/)

ищет дополнительное пространство, а затем трубу, т. Е. Должна быть труба для соответствия регулярному выражению.Если вам нужен либо пробел, либо пробел, используйте класс символов в скобках из двух [\s|]:

/(\d{1,4})[\s|](\d{4,6})[\s|](\d{3,4})/)

Поскольку это класс символов в скобках, вам также не нужноэкранируйте символ трубы.

Обратите внимание, что ваш пример входных данных не соответствует регулярному выражению, которое вы разместили;в частности, ваши примеры не имеют префикса «cmd», и они начинаются только с одной ведущей цифры, а не со 2 по 4, как ожидает ваше регулярное выражение.Я настроил здесь регулярное выражение в соответствии с примером ввода.

robert@saaz:~$ echo 1 1111 123 | perl -ne 'print "matches\n" if (m/(\d{1,4})[\s|](\d{4,6})[\s|](\d{3,4})/);' 
matches

robert@saaz:~$ echo '1|1111|123' | perl -ne 'print "matches\n" if (m/(\d{1,4})[\s|](\d{4,6})[\s|](\d{3,4})/);' 
matches
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...