*, ?, +
символы означают совпадение с этим символом. Какой символ означает "не совпадать" с этим? Примеры помогут.
Какой оператор регулярного выражения означает "Не совпадать" с этим символом?
Ответ 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>