对ReGEX的策略建议(在前瞻和前瞻中进行匹配)

对ReGEX的策略建议(在前瞻和前瞻中进行匹配),regex,Regex,我使用正向的lookback和lookahead在某些部分(从和到字符串)之间匹配单词 并获取为\1表和表2。a和b标签是可选的 我的问题是,如果我放置像(?:(\w+)\s*,?)+?这样的东西来匹配每个表部分,它看起来像是向后做的 如果我正确理解了你想要什么,你不需要向前看/向后看。你可以做: FROM (?:(\w+)(?: \w)*(?:,)? )+TO 在最外圆括号内的三个部分中,第二个和第三个部分需要单独处理,因为它们出于不同的原因是可选的。如果存在a和b标签,则第二个标签存在。如

我使用正向的lookback和lookahead在某些部分(从和到字符串)之间匹配单词

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

我的问题是,如果我放置像
(?:(\w+)\s*,?)+?
这样的东西来匹配每个表部分,它看起来像是向后做的


如果我正确理解了你想要什么,你不需要向前看/向后看。你可以做:

FROM (?:(\w+)(?: \w)*(?:,)? )+TO
在最外圆括号内的三个部分中,第二个和第三个部分需要单独处理,因为它们出于不同的原因是可选的。如果存在
a
b
标签,则第二个标签存在。如果表格不是列表中的最后一个表格,则第三个表格存在

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

FROM table1 a, table2, table3 c TO
将捕获“表1”、“表2”和“表3”

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

编辑:根据您的要求,在前向和后向仍然存在的情况下:

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

*(?“a和b标签是可选的”因此无论它们是否在输入中都是可选的,如果它们在输入中,您不希望它们在输出中?“,并获取as\1表格和表格2”您可以解释您在这里想要的捕获组的具体内容?您想要一个捕获组中的
table1
,另一个捕获组中的
table2
,还是其他什么?是的,无论它们是否在输入中都是可选的(查看regex101链接中的示例)。如果存在,我想多次捕获同一组,如表、表2、表3。我使用(?:())+?但它并没有像预期的那样工作。这会在Expresso中对您发布的链接给出不同的结果。不确定为什么,我知道这里没有任何与正则表达式风格相关的内容。我需要使用“向前看”和“向后看”,因为这是一个更复杂查询的简化,如果不是的话,我可以使用类似的查询,对不起。我在分析之前尝试过你的方法,但它不起作用。我应该声明,假设原始方法无法更改。非常感谢Ben!这对我不起作用,我遗漏了什么吗?@user1352530稍微更新了最后一个版本,以便根据需要处理空白。该工具似乎只输出最后一个捕获的捕获组,而不是出于某种原因所有的组
FROM table1 a, table2, table3 c TO
.*(?<=FROM)\s+(?:(\w+)(?:\s+\w)*(?:\s*,)?\s+)+(?=TO).*