我有一个这样的字符串:
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 );
}
实现这一点的一种方法是创建一个方法,该方法使用regex定位并返回任何内部IF语句。在这个方法中,每次通过正则表达式匹配找到另一个内部IF语句时,您都会调用自己。这里有一个非常简化的片段,只是为了演示这个概念。这基本上完成了递归正则表达式匹配,但是由于在标准Java中缺乏对递归正则表达式的支持,需要手动完成。我在这里即兴创作,因为我没有一个编译器来测试它。然而,您需要修改匹配的正则表达式来定位第一个内部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;
}
我希望有一个regex来匹配以开头的所有行,后面跟着以开头的任意数量的行。理想情况下,我希望将带有的每一行放在一个组中。 以下是我希望得到的结果: (为了缩短起见,我用了[...]。) 它实际上给了我这个: 我希望我已经说得够清楚了,你能帮我解决这个问题。请不要犹豫,询问更多的细节。
问题内容: 示例字符串: 我想先进行匹配,然后将其替换为一些文本,以使字符串变为,然后进行匹配。 问题答案: 令人讨厌的是,Javascript没有提供PCRE递归参数,因此要处理嵌套问题远非易事。但是可以做到的。
问题内容: 该字符串可以类似于以下之一: 我想匹配不限数量的“ a(x,y)”。如何使用Regex做到这一点?这是我所拥有的: 它仅匹配“ a(x,y)”的两个递归。 问题答案: Java的标准正则表达式库不支持递归,因此您无法将此类通用嵌套结构与之匹配。 但是在确实支持递归的版本(Perl,PCRE,.NET等)中,您可以使用以下表达式:
字符串可以类似于以下内容之一: 我想匹配无限数量的“a(x,y)”。我如何使用正则表达式来实现这一点?以下是我所拥有的: 它只匹配"a(x, y)"的两个递归。
问题内容: 当字符串以数字开头时,我需要匹配,然后是一个点,然后是一个空格和1个或多个大写字符。匹配必须发生在字符串的开头。我有以下字符串。 我尝试过的正则表达式是: 它不匹配。一个有效的正则表达式将对这个问题有什么作用? 问题答案: (对不起,我先前的错误。大脑现在坚定地投入了。嗯,也许。) 这有效: 分解: =字符串开头 =一个或多个数字 (之所以转义,是因为它在字符串中,因此) =文字(或者
问题内容: 我从以下格式的文件中获取输入: 现在,我想在我的Java代码中读取int1,int2,int3和int4。我该如何在Java中使用正则表达式匹配。谢谢。 问题答案: 为了避免空值: