繁体   English   中英

字符串解析:当参数可以是嵌套函数时,如何隔离参数

[英]String parsing: how to isolate parameters when a parameter can be a nested function

在Java中,我试图使用正则表达式处理FUNC{parameter,parameter}函数。 我已经隔离了包含参数的字符串,现在我必须从字符串中提取它们。 我的想法是分割使用的参数string.split方法和,符号。 expression.split(",")

问题在于参数本身可以是函数,例如

FUNC1{FUNC2{1,2},7}

所以,分裂只是,不工作。 我现在正在尝试的是以下正则表达式:

[^\\{]+,[^\\}]+

我认为这意味着用a分隔参数,然后在参数前加上一个非{ ,然后再加上一个非} 但这也不起作用...可能是什么问题?

正则表达式无法解析无限递归结构,为什么不只读取字符串并解析出参数?

一次读取输入的一个字符,找到第一个大括号,继续阅读直到您碰到不在另一组大括号内的逗号为止(计数开括号和闭括号直到它们相等),然后在这些位置之间设置字符串到第一个参数的值。 然后继续读取输入,直到碰到不在另一组括号内的右括号,并将此值设置为第二个参数。 通过一些智能编程(不是我所描述的算法),您可以一次性分析整个输入,包括参数内部引用的每个函数以及该函数的参数。

我相信实现此目标的更好方法是使用Scanner 扫描程序将允许您跳过输入的某些部分(在这种情况下为String),通过匹配正则表达式对其中的某些部分进行分组(即检索)。 这是具有强大API的非常有用的工具。

希望这有助于知道在哪里寻找。

如评论中所述,您正在解析的语言似乎不是正规的,因此无法通过正则表达式进行解析。

至于您当前的方法,调用String.split()将消耗/销毁与表达式匹配的String部分(而不仅仅是逗号!),我认为这不是您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM