*, ?, +все символы означают соответствие этому символу. Какой символ означает «не соответствует»? Примеры помогут.
*, ?, +все символы означают соответствие этому символу. Какой символ означает «не соответствует»? Примеры помогут.
Ответы:
Вы можете использовать классы инвертированных символов, чтобы исключить определенные символы: например, [^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
^ используется в начале диапазона символов или в утверждениях отрицательного просмотра вперед / назад.
>>> 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>
?!в последних двух примерах или можете просто использовать !отдельно? Что там делает ??
?того, чтобы сказать, что это расширение. У других движков регулярных выражений могут быть свои правила.