Регулярное выражение для строки, которая не начинается с последовательности


198

Я обрабатываю кучу таблиц с помощью этой программы , но мне нужно игнорировать таблицы , начинающиеся с метки "tbd_". Пока что у меня есть что-то вроде [^ tbd_], но это просто не соответствует этим персонажам.


Как работает SchemaSpy? Вы передаете ему список имен таблиц или вы передаете ему регулярное выражение, и оно выполняет сопоставление?
Марк Бик

Я передаю регулярное выражение (это флаг -i), и оно будет импортировать совпадения, или так будет сказано в любом случае =)
echoblaze

4
@echoblaze: Если вы обрабатываете XML, почему бы вам не использовать синтаксический анализатор XML? Это было бы намного проще, чем с помощью регулярных выражений.
Гамбо

Ответы:


335

Вы можете использовать отрицательное прогнозное утверждение:

^(?!tbd_).+

Или отрицательное утверждение:

(^.{1,3}$|^.{4}(?<!tbd_).*)

Или просто старые наборы символов и чередования:

^([^t]|t($|[^b]|b($|[^d]|d($|[^_])))).*

6
Это ограничено какими-то конкретными двигателями регулярных выражений?
Марк Бик

1
Я спрашиваю только потому, что второй тест все еще соответствует tbd_ в моем тесте. Первый из них великолепен.
Марк Бик

5
Взгляните на сравнение вкусов с регулярными выражениями
Gumbo

1
@ Гамбо - разве это не должно закончиться. * Вместо. +? Строка, которая является tbd_, также начинается с этого ... поэтому по определению не должно следовать никаких других символов? В остальном хороший пример. Это действительно требует движка регулярных выражений, который поддерживает lookaround все же.
BenAlabaster

1
@balabaster: я не думаю, что он ищет пустые строки. Но если это так, то он может легко изменить , что путем замены .+на.*
Gumbo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.