简单的正则表达式问题

3

我需要搜索一堆文件,找出其中包含“tblPayment”或“tblInvoice”的内容。

我还想匹配任何名为“tblPaymentMethod”,“tblInvoiceItem”,“tblInvoicePayment”的表。

有谁能帮我写一个正则表达式吗?

再次感谢!


/tblPayment/, /tblInvoice/。认真的,就像这样。 - SilentGhost
1
你每次遇到一个你认为很简单的问题就发出讽刺的评论吗?成熟点吧。 - Jim B
6个回答

4
tbl(Invoice|Payment)+

如果您需要这种灵活性,它还将匹配没有表前缀的表。

编辑:有几种明确的方法可以做到这一点(即tblInvoice | tblPayment | ...),但每次添加要匹配的新表时,您都必须修改正则表达式。 这可能是您想要的,但我想为您提供更灵活的内容,您不必经常进行编辑。


需要注意的是,开头和结尾处的 '/' 不是正则表达式本身的一部分,它们只是 Perl 和 Javascript 使用的约定。为了成为语言无关的,我认为它们可以省略。 - Steve Wortham
@Paul,没错...他希望能够匹配像tblInvoicePayment或者以后可能是tblInvoiceRandom这样的表,这个方法也会处理好这个问题。 - Robert Greiner
@Tim 是的,它将匹配表名中的 tblInvoice 部分。在 OP 的情况下,命中部分匹配是有意义的,这样您就不必明确添加每个要匹配的表名。在其他情况下,您可能需要完全匹配(在这种情况下,我的正则表达式将无法工作)。 - Robert Greiner
@Jim B,没问题,我很高兴它能满足你的需求。祝你好运! - Robert Greiner

0
你需要这个正则表达式。
tblPayment|tblInvoice|tblPaymentMethod|tblInvoiceItem|tblInvoicePayment

具体实现方式取决于您所使用的编程语言。


0
tbl(Payment(Method)?|Invoice(Item|Payment)?)

使用最短的方式可能比直接将一堆字符串进行文字比较要难以维护一些。


0
在 Perl 的正则表达式语法中:
/tbl
 ((Payment(Method)?)
 |
 (Invoice(Item|Payment)?))
/x

将匹配您正在寻找的内容。


0
如果您想匹配任何以tblInvoice或tblPayment开头的表名,则可以使用以下代码:
tbl(?:Invoice|Payment)\w*

(?:发票|付款)是一个非捕获组(在这种情况下比捕获组更有效)。然后\w*将选择性地匹配紧随其后的字母数字字符。


0
在Python中,您可以使用类似于以下的内容: "tbl(Invoice|Payment)+?"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接