Требуется регулярное выражение для определения строки "hostname abc_pqr_xyz" (3 слова могут быть любыми) - PullRequest
0 голосов
/ 02 апреля 2019

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

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

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

1 Ответ

2 голосов
/ 02 апреля 2019

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

^hostname\s+[^_]*_[^_]*_[^_]*$

См. Демонстрационную версию regex и Регулексный график :

enter image description here

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

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

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

^hostname\s+[^_]*(?:_[^_]*){2}$

См. это регулярное выражение demo .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...