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