Какой оператор регулярного выражения означает "Не совпадать" с этим символом?

*, ?, + символы означают совпадение с этим символом. Какой символ означает "не совпадать" с этим? Примеры помогут.

Ответ 1

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

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

Если вы используете PHP, вы можете взглянуть на документацию классов символов регулярных выражений.

Ответ 2

Есть два способа сказать "не совпадать": диапазоны символов и отрицательные обратные отображения с нулевой шириной /lookbehind.

Первые: не соответствуют 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.

Ответ 3

[^] (внутри []) является отрицанием в регулярном выражении, тогда как ^ является "началом строки"

[^a-z] соответствует любому одиночному символу не от "a" до "z"

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

Ссылка

Ответ 4

^, используемый в начале диапазона символов, или отрицательные утверждения lookahead/lookbehind.

>>> 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>