Регулярное выражение с двойными отрицательными совпадениями
Учитывая ряд строк:
- error.user
- успех
- success.user
- success.admin
Я хочу написать регулярное выражение, которое будет соответствовать всему, что не начинается с error
и это также не имеет .user
в этом. Так что для этого списка, success
а также success.admin
То, что у меня так далеко, это: /^((?!error)\w*)((?!\.*user)\w*)/
Первая часть: ((?!error)\w*)
работает нормально, и сужает спички просто строки, которые начинаются с success
, Почему-то вторая часть: ((?!\.*user)\w*)
точно ничего не делает. Я думаю, что первая часть слишком подходит.
Я делаю это в PHP/PCRE
Вот моя ссылка на regex101.com: https://regex101.com/r/l2sZru/1
1 ответ
Вы должны исправить свое отрицательное регулярное выражение следующим образом:
^(?!error|.*\.user)[\w.]+$
Вот (?!error|.*\.user)
будет утверждать неудачу, если error
находится в начале ИЛИ, если.user` найден в любом месте ввода.
(?!\.*user)
в вашем регулярном выражении означает утверждение ошибки, когда на входе есть 0 или более точек, а затем user
только в начале.