2015-03-25 5 views
-3

Я хочу понять, как работает регулярное выражение (aka regex), хранящееся в переменной «regex»?Как работает это регулярное выражение?

regex='^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$' 

Я новичок в создании сценариев bash и нелегко работать с регулярным выражением!

Номера с номерами 1-9, 0-9, 0-4 и 0-5 повторяются как минимум дважды, что создает путаницу!
Спасибо!

+3

Regex объясняется здесь: https://regex101.com/r/sP6eQ8/1 –

+0

Я хочу понять, как это будет работать, если мы будем использовать его в текстовом файле! Допустим, у меня есть текстовый файл с именем file1.txt. Как это регулярное выражение будет сравнивать текстовый файл! –

+0

Это зависит от того, что * использует * регулярное выражение, но обычно что-то вроде 'grep' будет использовать регулярное выражение для вывода этих строк из файла file1.txt, соответствующих ему. – chepner

ответ

4

Посмотрите только по этой части:

[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5] 

Это ряд альтернатив (разделенных |), здесь на отдельных линиях:

[1-9]    # Matches 1-9 
[1-9][0-9]   # Matches 10-99 
1[0-9][0-9]   # Matches 100-199 
2[0-4][0-9]   # Matches 200-249 
25[0-5]    # Matches 250-255 

Другими словами, он соответствует любому числу от 1 до 255 включительно. Это немного круговое движение, потому что регулярное выражение не имеет понятия чисел, а только символов.

Регулярное выражение пытается сопоставить четыре из этих чисел с периодами между ними, чтобы соответствовать целым IPv4-адресам.

+0

Прежде всего, спасибо за ответ! 1-9 просто! Из того, что я понимаю, «[1-9] [0-9]» соответствует 10-99, потому что в первом скобке мы сопоставляем 1-9, а во втором - 0-9. В третьей части мы имеем 1 [0-9] [0-9], который соответствует 100-199, потому что мы ставим «1» перед обоими скобками! Я прав? –

+0

@ScottPearce Да –

0

Похоже, что кто-то пытался соответствовать IPv4-адресу. Группа

([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]) 

Соответствует число от 1 до 255, он затем совпадает с номером от 0 до 255 еще три раза.

(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3} 

Они пытались отделить четыре числа с точками. Исходное регулярное выражение, которое вы выложили, не уклонилось от «.», чтобы оно соответствовало любому символу между четырьмя группами. С тех пор кто-то редактировал регулярное выражение, чтобы исправить этот символ.

Регулярное выражение обернуто в ^ и $, чтобы убедиться, что строка содержит это и только это. ^ соответствует началу строки. $ соответствует концу.

+0

Спасибо за объяснение! –

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