#regex
#регулярное выражение
Вопрос:
Я хочу сопоставить IP-адреса с 10.0-29.x.x, 10.31-39.x.x и 10.41-253.x.x. Из приведенных ниже строк я хочу захватить 3-ю строку и ниже.
network 10.40.5.0 0.0.0.255
network 10.255.5.0 0.0.0.255
network 10.23.3.0 0.0.0.255
netowrk 10.273.255.0 0.255.255
Таким образом, способ, которым это будет работать, заключается в том, что если есть совпадение, он установит флаг, что конфигурация недействительна. У меня может быть 10 недопустимых строк или только 1. Это не имеет значения.
Комментарии:
1. Итак, как у вас дела? Что вы пробовали? Какие проблемы вы наблюдаете в своем текущем решении? Пожалуйста, предоставьте дополнительную информацию о ваших текущих попытках (я предполагаю, что вы сделали несколько, прежде чем спрашивать, поэтому просто укажите наиболее важные) и какие проблемы у вас возникли с этими попытками.
2. Регулярные выражения предназначены для сопоставления шаблонов, а не для проверки числовых значений. Используйте регулярное выражение для поиска вероятных IP-адресов, а затем проанализируйте их на выбранном вами языке и проверьте их числовые значения.
Ответ №1:
Регулярные выражения не предназначены для вычисления. Однако вы можете попробовать что-то вроде [3-4]{1}, если хотите 3 или 4. Для большей обработки вам, возможно, придется сначала сопоставить его с обычным регулярным выражением IP, а затем обработать его на любом языке.
Ответ №2:
Суть вашей проблемы — это регулярное выражение, которое соответствует этим диапазонам чисел: 0-29, 31-39, 41-253
Расширенное регулярное выражение, соответствующее этому, является:
^network 10.([0-9]|1[0-9]|2[0-9]|3[1-9]|4[1-9]|[5-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-3]).[0-9] .[0-9]
Регулярное выражение разделяется на следующие шаги: 0-9, 10-19, 20-29, 31-39, 41-49, 50-99, 100-199, 200-249, 250-253
Сценарий оболочки, который будет работать:
if {
cat input_file |
egrep -q '^network 10.([0-9]|1[0-9]|2[0-9]|3[1-9]|4[1-9]|[5-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-3]).[0-9] .[0-9] '
}
then
echo action if matched
else
echo action if not matched
fi