正则表达式与嵌套Parens匹配

时间:2011-03-22 16:28:35

标签: java regex

好的,

我不知道是否可以写这个正则表达式,所以我将首先寻求帮助 - 到目前为止我没有成功。

源字符串:

,convert(varchar(8000), lt.text) as reason

期望的匹配:

convert(varchar(8000), lt.text)

假设

  • 语句以逗号开头(在parens之外)
  • 州将以“as”结束

这是我开始使用的正则表达式:

\(.+\)

谢谢

4 个答案:

答案 0 :(得分:1)

Bar Kiers - 是正确的,无法应对“任意数量的嵌套”,这是我记忆的原因以及为什么我无法实现我想要的原因。

HACK ALERT:我通过抓住最内层实例并用占位符替换它来解决,然后递归处理直到没有更多匹配...

答案 1 :(得分:0)

使用以下正则表达式:

^ \,(小于?IMP> [\ S \ S] *)作为

答案 2 :(得分:0)

^,(.+\)) as [a-z]+$

我在[a-z] +中包含了“原因”。

如果你有的话,我建议你使用RightToLeft选项。它会加速正则表达式。如果您的语言需要,请记得逃避\

答案 3 :(得分:0)

我在这里假设PCRE语法。如果你可以保证字符“as”没有显示在parens中,那么这样的东西应该有效:

{,(.*) as }

如果你不能保证“as”不会出现在parens中,你需要定义一些其他条件。例如,如果该行总是在“as”之后结束,那么这样的东西就可以工作:

{,(.*) as \S+$}

或者您可以使用真正的解析器,它可以保留上下文(parens的数量)。