Есть ли в регулярных выражениях оператор НЕ? Как в этой строке:"(2001) (asdf) (dasd1123_asd 21.01.2011 zqge)(dzqge) name (20019)"
Я хочу , чтобы удалить все , \([0-9a-zA-z _\.\-:]*\)
но не один , где в год: (2001)
.
Так что регулярное выражение должно возвращать должно быть: (2001) name
.
ПРИМЕЧАНИЕ: \((?![\d]){4}[0-9a-zA-z _\.\-:]*\)
у меня что-то вроде не работает (как- (20019)
то тоже совпадает ...)
(2001) name
.Ответы:
Нет, прямого оператора not нет. По крайней мере, не так, как вы надеетесь.
Однако вы можете использовать отрицательный просмотр вперед нулевой ширины:
В
(?!...)
означает часть «соответствует только если текст следующий (отсюда: предпросмотр) это не ( а значит: отрицательный). Сопрягать это Но это не на самом деле потребляют символы он соответствует (отсюда: нулевой ширины).На самом деле существует 4 комбинации взглядов с двумя осями:
источник
\((?![\d]{4})[0-9a-zA-z _\.\-:]+\)
нем все еще(20019)
есть{4}
внешний вид вперед, а в этом комментарии вы помещаете его внутрь : какой из них вы пробовали? Также: если вы хотите(20019)
сопоставить, вы должны добавить\)
внутреннюю часть вашего lookahead:\((?![\d]{4}\))[0-9a-zA-z _\.\-:]+\)
\((?![\d]{4} -->\)<--)[0-9a-zA-z _\.\-:]+\)
Тогда есть скобка, не закрытая, не так ли?)
потому что хочу сопоставить буквальный символ)
(так же, как вы это делаете в самом начале и в самом конце вашего регулярного выражения!). Затем после того, как я это сопоставил, я заканчиваю просмотр вперед, используя неэкранированный)
.Не совсем, хотя обычно вы можете использовать обходной путь в одной из форм
[^abc]
, который не является символом за символомa
илиb
илиc
,a(?!b)
которымa
не следуетb
(?<!a)b
которомуb
не предшествуетa
источник
[^abc]
должно означать неa
илиb
илиc
, а не «не строкаabc
».