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


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

4 67

4 ответа:

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

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

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

есть два способа сказать" не совпадают": диапазоны символов и отрицательный lookahead/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.

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

[^a-z] соответствует любому одиночному символу, который не от "А"до " з"

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

ссылка

^ используется в начале диапазона символов или отрицательных утверждений 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>