2015-07-17 2 views
1

([1|2|3|4|5|6|7|8|9]) и (1|2|3|4|5|6|7|8|9)В чем разница между этими двумя регулярными заявлениями выражения

Я хотел бы проверить каждый порт коммутатора Cisco для определенного набора команд. Порты пронумерованы от 1 до 9. Используя регулярное выражение, я хочу, чтобы код выбирал каждый из чисел для проверки конфигурации.

ответ

1

Первый будет соответствовать любому из:

1 2 3 4 5 6 7 8 9 | 

в то время как второй будет соответствовать любому из:

1 2 3 4 5 6 7 8 9 

Заметим, что первое эквивалентно: ([123456789|]).

Конечно, регулярное выражение, которое выполнит эту задачу для вашей проблемы (немного), отличается: ([123456789]), или ([1-9]).

+0

Что делать, если я просто хотел найти следующие (1 | 2 | 3 | 6 | 7 | 8) – Pirates

+1

Тогда вы можете использовать: '[123678]'. –

+0

Будет ли он смотреть на каждый номер отдельно или на любой из перечисленных номеров – Pirates

1

Первый будет соответствовать любому символу в наборе

| 123456789

Второй будет соответствовать

1 или 2 или 3 или 4 или 5 или 6 или 7 или 8 или 9

.

+0

Хорошо, как насчет 1 & 2 & 3 & 6 & 8? – Pirates

+0

может быть что-то вроде этого ([1] | [2] | [3] | [6] | [8]) – Pirates

+0

какая строка вы пытаетесь сопоставить? Можете ли вы написать эту строку для нас? – pquest

6

Первое регулярное выражение не имеет смысла: это означает «выбрать 1 или выбрать | или выбрать 2 или выбрать 3 или ... или выбрать 9»

второе средство «выбрать 1 или выбрать 2 или выберите 3 или ... или выберите «9»

Я думаю, что регулярное выражение, которое вы искали в первом регулярном выражении, равно ([123456789]), что в точности эквивалентно второму регулярному выражению.

Чтобы сделать его еще проще, вы можете использовать ([1-9]), что указывает только на диапазон.

Для получения дополнительных сведений о регулярных выражениях, в частности, о совместимых с perl регулярных выражениях (PCRE), вы можете посмотреть here.

1

Как отмечают другие, "|" в первом, очевидно, ошибочно, так как нет необходимости повторять его и, следовательно, должно быть [123456789] или [1-9]. Помимо этого, также стоит отметить, что в числовом контексте не было бы функциональной разницы с этими точными данными, скрывая логическую ошибку, потому что они оба содержат только одиночные символы (во вторых «строках» просто бывают одиночные символы). Однако ([1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10]) и (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10) не было бы функционально одинаково даже в числовом контексте, поскольку только первый будет соответствовать «0» (с избыточным «1», а также посторонним «|»), и только второй будет соответствовать 10. Отмечая, что это может еще больше помочь устранить путаницу и потенциал которые делают это важным.

+1

Неправильное использование. Обозначение кронштейна означает, что заключенный в скобки представляет собой набор «выбираемых» элементов и; поэтому можно выбрать '|', что нежелательно. – erip

+0

Спасибо, я стою правильно исправлен, и обновил свой комментарий в надежде, что это останется от использования (надеюсь, что это уместно). –

Смежные вопросы