java 字符串加括号_如何在Java中将括号内的字符串(嵌套)匹配?

7a4caee6a9f0c91f7594a9f7161c4061.png

FFIVE

正如我所说的,流行的看法相反(不相信一切人说)匹配嵌套的括号内是可能的正则表达式。使用它的不利之处在于,您最多只能将嵌套固定到一个水平。对于您希望支持的每个其他级别,您的正则表达式将越来越大。但是不要相信我。我来给你展示。正则表达式:\([^()]*\)匹配一个级别。对于最多两个级别,您需要:\(([^()]*|\([^()]*\))*\)等等。为了继续添加级别,您所要做的就是将中间(第二个)[^()]*部分更改为([^()]*|\([^()]*\))*(在此处检查三个级别)。正如我所说,它将越来越大。你的问题:对于您的情况,两个级别可能就足够了。因此,其Java代码为:String fortranCode = "code code u(i, j, k) code code code code u(i, j, k(1)) code code code u(i, j, k(m(2))) should match this last 'u', but it doesnt.";String regex = "(\\w+)(\\(([^()]*|\\([^()]*\\))*\\))"; // (\w+)(\(([^()]*|\([^()]*\))*\))System.out.println(fortranCode.replaceAll(regex, "__$1%array$2"));输入:code code u(i, j, k) code code code code u(i, j, k(1)) code code code u(i, j, k(m(2))) should match this last 'u', but it doesnt.输出:code code __u%array(i, j, k) code code code code __u%array(i, j, k(1)) code code code u(i, j, __k%array(m(2))) should match this last 'u', but it doesnt.底线:在一般情况下,解析器会做得更好-这就是人们对此大为恼火的原因。但是对于简单的应用程序,正则表达式就足够了。注意:某些类型的正则表达式支持嵌套运算符R(Java不支持,而PHPE和Perl等PCRE引擎不支持),它允许您嵌套任意数量的级别。有了他们,您可以执行:\(([^()]|(?R))*\)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值