Простой вопрос о регулярных выражениях - PullRequest
3 голосов
/ 12 мая 2010

Мне нужно поискать в куче файлов все, что содержит «tblPayment» или «tblInvoice»

Я также хочу сопоставить любые таблицы с именами "tblPaymentMethod", "tblInvoiceItem", "tblInvoicePayment"

Кто-нибудь хочет помочь мне с тем, как написать регулярное выражение для этого?

Еще раз спасибо!

Ответы [ 6 ]

4 голосов
/ 12 мая 2010
tbl(Invoice|Payment)+

это также будет соответствовать таблицам без префикса таблицы, если вам нужна такая гибкость.

Редактировать: Есть несколько способов сделать это явно (т.е. tblInvoice|tblPayment|...), но вам придется изменять свой RegEx каждый раз, когда вы добавляете новую таблицу, для которой вы хотите соответствие. Это может быть то, что вы хотите, но я хотел бы дать вам что-то более гибкое, что вам не нужно постоянно редактировать.

0 голосов
/ 12 мая 2010

Если вы хотите сопоставить любое имя таблицы, начинающееся с tblInvoice или tblPayment, тогда это будет сделано:

tbl(?:Invoice|Payment)\w*

(?: Счет-фактура | Платеж) - это группа без захвата (в данном случае более эффективная, чем группа захвата). И тогда \ w * при желании будет соответствовать буквенно-цифровым символам, следующим сразу за ними.

0 голосов
/ 12 мая 2010

В Python вы можете использовать что-то вроде этого: "TBL (счет-фактура | Оплата) +?"

0 голосов
/ 12 мая 2010

В синтаксисе Perl RE:

/tbl
 ((Payment(Method)?)
 |
 (Invoice(Item|Payment)?))
/x

будет соответствовать тому, что вы ищете.

0 голосов
/ 12 мая 2010
tbl(Payment(Method)?|Invoice(Item|Payment)?)

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

0 голосов
/ 12 мая 2010

Вам нужно это регулярное выражение.

tblPayment|tblInvoice|tblPaymentMethod|tblInvoiceItem|tblInvoicePayment

Реализация будет зависеть от языка, на котором вы его используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...