Регулярний вираз для рядка, який не починається з послідовності


197

Я обробляю купу таблиць за допомогою цієї програми , але мені потрібно ігнорувати ті, які починаються з мітки "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
Подивіться на порівняння смаку регулярних виразів.info
Gumbo

1
@Gumbo - чи це не закінчиться. * Замість. +? Рядок, що є tbd_, також починається з цього ... тому за визначенням не потрібно дотримуватися жодних інших символів? Інакше хороший приклад. Для цього потрібен регекс-движок, який підтримує пошук.
BenAlabaster

1
@balabaster: Я не думаю, що він шукає порожніх рядків. Але якщо це так, то він може легко змінити , що шляхом заміни .+на.*
Gumbo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.