Який оператор регулярного виразу означає "Не" збігається з цим символом?


Відповіді:


89

Ви можете використовувати заперечені класи символів, щоб виключити певні символи: наприклад, [^abcde]буде відповідати будь-чому, крім символів a, b, c, d, e.

Замість того, щоб буквально вказувати всі символи, ви можете використовувати скорочення у класах символів: [\w](нижній регістр) буде відповідати будь-якому "символу слова" (буква, цифри та підкреслення), [\W](верхній регістр) відповідатиме будь-чому, крім символів слова; аналогічним чином, [\d]буде відповідати 0-9 цифр, тоді як [\D]збігається з будь-чим, крім 0-9 цифр тощо.

Якщо ви використовуєте PHP, ви можете поглянути на документацію класів регулярних виразів .


81

Існує два способи сказати "не збігаються": діапазони символів та негативний вигляд "нульової ширини" / погляд позаду.

Колишній: не збігаються a, b, cабо 0:[^a-c0]

Останнє: відповідає будь-якому трибуквенному рядку, за винятком fooта bar:

(?!foo|bar).{3}

або

.{3}(?<!foo|bar)

Крім того , корекція для вас: *, ?і на +самому ділі не відповідає нічого. Вони є операторами повторення і завжди слідують за відповідним оператором. Таким чином, a+кошти відповідають одному або декільком з a, [a-c0]+значить відповідати одному або більше a, b, cабо 0, в той час як [^a-c0]+буде відповідати одному або більше нічого , що не було a, b, cабо 0.


^((?!foo).)+$Зіставте будь-який рядок, що не містить foo regex101.com/r/z6a65l/4
Леві Багюлі,

48

[^] (у межах [] ) - це заперечення в регулярному виразі, тоді як ^це "початок рядка"

[^a-z] відповідає будь-якому окремому символу, який не переходить від "a" до "z"

^[a-z] означає, що рядок починається з "a" на "z"

Довідково


8

^ використовується на початку діапазону символів, або негативні твердження про перегляд / погляд позаду.

>>> re.match('[^f]', 'foo')
>>> re.match('[^f]', 'bar')
<_sre.SRE_Match object at 0x7f8b102ad6b0>
>>> re.match('(?!foo)...', 'foo')
>>> re.match('(?!foo)...', 'bar')
<_sre.SRE_Match object at 0x7f8b0fe70780>

Чи потрібно вам використовувати ?!останні 2 приклади, чи можете просто використовувати !самі по собі? Що ?там робити?
Натисніть «Проголосувати»

Python потребує ?, щоб сказати, що це розширення. Інші двигуни регулярних виразів можуть мати свої правила.
Ігнасіо Васкес-Абрамс

@Click: Це досить стандартно. regular-expressions.info/refadv.html , також у більшості посібників з використання регулярних виразів сказано те саме.
Амадан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.