我正在使用正面的lookbehind和lookahead来匹配某些部分之间的单词(FROM和TO字符串)。
.*(?<=FROM)\s+(.*?)\s+(?=TO).*
编辑:这种方法无法改变。需要假设,不是方法本身的解决方法,谢谢!这是一个关于如何在匹配之间处理lokaheads的理论问题。
我想输入一个像
这样的字符串FROM table a, table2 b TO
并获取\1
表和table2。 a和b标签是可选的。
我的问题是,如果我放置(?:(\w+)\s*,?)+?
之类的内容来匹配每个表格部分,那么它似乎是向后完成的
答案 0 :(得分:2)
如果我理解你想要什么,你就不需要前瞻/后退。你可以这样做:
FROM (?:(\w+)(?: \w)*(?:,)? )+TO
在最外面括号内的三个部分中,第二个和第三个部分需要单独处理,因为它们是可选的,原因各不相同。如果存在a
和b
标签,则会出现第二个标签。如果表不是列表中的最后一个,则存在第三个。
这将捕获您描述的表名。例如:
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).*