gpt4 book ai didi

Java正则表达式递归匹配

转载 作者:行者123 更新时间:2023-11-30 07:19:09 28 4
gpt4 key购买 nike

我有一个像这样的字符串:

IF(expr1,text1,IF(expr2,text2,IF(expr3,text3,text4)))

我需要处理IF(expr3,text3,text4)))所以上面变成了

 IF(expr1,text1,IF(expr2,text2,new_text))

我需要继续这样做,直到我做到

 IF(expr1,text1,new_text3)

我的模式字符串 "IF\\(.*?,.*?,.*?\\)" 将匹配整个内容。不是 IF(expr3,text3,text4)))

Java代码:

String val = "IF(expr1,text1,IF(expr2,text2,IF(expr3,text3,text4)))";
String regx = "IF\\(.*?,.*?,.*?\\)";
Pattern patt1 = Pattern.compile(regx);
Matcher m2 = patt1.matcher(val);
while (m2.find()) {
String val0 = m2.group();
System.out.println( val0 );
}

最佳答案

实现此目的的一种方法是创建一个使用正则表达式查找并返回任何内部 IF 语句的方法。在此方法中,每次正则表达式匹配找到另一个内部 IF 语句时,您都会调用自身。这是一个非常简化的片段,仅用于演示该概念。这本质上完成了递归正则表达式匹配,但是由于标准 Java 中缺乏对递归正则表达式的支持,需要手动完成。我在这里即兴创作,因为我没有编译器来测试它。但是,您将需要修改匹配的正则表达式才能找到第一个内部 IF 语句。也许这样的正则表达式 ^IF\(.*?,.*?,(IF\(.*\))\) 会起作用?

String val = 'IF(expr1,text1,IF(expr2,text2,IF(expr3,text3,text4)))';

String mostInnerIfStatement = getInnerIfStatement(val);

// no inner IF statement found
if(mostInnerIfStatement == null) {
// handle scenario where IF statement has no inner IF statements
}

String getInnerIfStatement(String val) {
String regx = '^IF\\(.*?,.*?,(IF\\(.*\\))\\)';
Pattern patt1 = Pattern.compile(regx);
Matcher m2 = patt1.matcher(val);

// initialize to value passed in
String nextInnerIfStatement = val;

// test if match found
if(m2.find()) {
// call self if another match found
String result = getInnerIfStatement(m2.group());

// if result is null then no more inner IF statements found so do not set nextInnerIfStatement
if(result != null) {
nextInnerIfStatement = result;
}
}

return nextInnerIfStatement;
}

关于Java正则表达式递归匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37890382/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com