Нужно регулярное выражение для идентификации строки «имя хоста abc_pqr_xyz» (3 слова могут быть любыми)

#regex

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

Вопрос:

Я хотел бы проверить все строки с форматом hostname abc_pqr_xyz в файле. Для этого нужно регулярное выражение. В строке должно быть ровно 2 _ ‘s и 3 слова.

Я пытался использовать регулярное выражение ^hostname s .*_.*_.*

Но это дает положительный результат для abc_abc_abc_abc_abc , поскольку оно рассматривает abc_abc_abc как одно слово.

Комментарии:

1. Используйте ^hostnames [^_]*_[^_]*_[^_]*$

Ответ №1:

Вы можете использовать [^_] класс отрицаемых символов, который соответствует любому символу, но _ вместо . :

 ^hostnames [^_]*_[^_]*_[^_]*$
  

Смотрите демонстрацию регулярных выражений и график регулярных выражений:

введите описание изображения здесь

Смотрите $ в конце, который проверяет конец строки.

Кроме того, пробел перед s потребует пробела, а затем 1 или более символов пробела, таким образом, этот пробел может быть вредным, поэтому я удалил его из выражения.

Обратите внимание, что вы можете сгруппировать _[^_]* , а затем установить количество повторений, которое вы можете скорректировать в будущем:

 ^hostnames [^_]*(?:_[^_]*){2}$
  

Смотрите эту демонстрацию регулярных выражений.