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

198

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

echoblaze
источник
Как работает 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