这个正则表达式的策略建议(在前瞻和后面的中间匹配)

时间:2014-06-03 16:11:03

标签: regex

我正在使用正面的lookbehind和lookahead来匹配某些部分之间的单词(FROM和TO字符串)。

.*(?<=FROM)\s+(.*?)\s+(?=TO).*

编辑:这种方法无法改变。需要假设,不是方法本身的解决方法,谢谢!这是一个关于如何在匹配之间处理lokaheads的理论问题。

我想输入一个像

这样的字符串
FROM table a, table2 b TO

并获取\1表和table2。 a和b标签是可选的。

我的问题是,如果我放置(?:(\w+)\s*,?)+?之类的内容来匹配每个表格部分,那么它似乎是向后完成的

http://regex101.com/r/mV4rD8

1 个答案:

答案 0 :(得分:2)

如果我理解你想要什么,你就不需要前瞻/后退。你可以这样做:

FROM (?:(\w+)(?: \w)*(?:,)? )+TO

在最外面括号内的三个部分中,第二个和第三个部分需要单独处理,因为它们是可选的,原因各不相同。如果存在ab标签,则会出现第二个标签。如果表不是列表中的最后一个,则存在第三个。

这将捕获您描述的表名。例如:

FROM table1 a, table2, table3 c TO

将捕获&#34; table1&#34;,&#34; table2&#34;和&#34; table3&#34;。

我使用了文字空格,但如果您愿意,可以用\s替换它们。

编辑:根据您的要求,前瞻和后视仍然存在:

.*(?<=FROM)\s+(?:(\w+)(?:\s+\w)*(?:\s*,)?\s+)+(?=TO).*