Вы можете использовать классы инвертированных символов, чтобы исключить определенные символы: например, [^abcde]будет соответствовать чему угодно, кроме символов a, b, c, d, e.
Вместо того, чтобы указывать все символы буквально, вы можете использовать сокращения внутри классов символов: [\w](нижний регистр) будет соответствовать любому «словесному символу» (буква, числа и подчеркивание), [\W](верхний регистр) будет соответствовать чему угодно, кроме словесных символов; аналогично, [\d]будет соответствовать цифрам 0-9, тогда как [\D]соответствует чему угодно, кроме цифр 0-9, и так далее.
Есть два способа сказать «не соответствует»: диапазоны символов и отрицательный просмотр вперед / назад нулевой ширины.
Прежний: не совпадают 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.
Ответы:
Вы можете использовать классы инвертированных символов, чтобы исключить определенные символы: например,
[^abcde]
будет соответствовать чему угодно, кроме символов a, b, c, d, e.Вместо того, чтобы указывать все символы буквально, вы можете использовать сокращения внутри классов символов:
[\w]
(нижний регистр) будет соответствовать любому «словесному символу» (буква, числа и подчеркивание),[\W]
(верхний регистр) будет соответствовать чему угодно, кроме словесных символов; аналогично,[\d]
будет соответствовать цифрам 0-9, тогда как[\D]
соответствует чему угодно, кроме цифр 0-9, и так далее.Если вы используете PHP, вы можете взглянуть на документацию по классам символов регулярных выражений .
источник
Есть два способа сказать «не соответствует»: диапазоны символов и отрицательный просмотр вперед / назад нулевой ширины.
Прежний: не совпадают
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[^]
(внутри [] ) - отрицание в регулярном выражении, тогда^
как «начало строки»[^a-z]
соответствует любому одиночному символу, который не от "a" до "z"^[a-z]
означает, что строка начинается с «а» до «я»Справка
источник
^
используется в начале диапазона символов или в утверждениях отрицательного просмотра вперед / назад.>>> 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>
источник
?!
в последних двух примерах или можете просто использовать!
отдельно? Что там делает?
??
того, чтобы сказать, что это расширение. У других движков регулярных выражений могут быть свои правила.