考虑下面的场景,我有一个输入字符串
"input [yes] [yes] [yes] [mk:[yes] [yes] [yes]] [yes] [iif:[yes] [yes] [yes]]"
替换后我想要的输出字符串全部为 [yes]
将被替换为 Yes
但是,如果它嵌套在辅助或 n-backets 中,则此类模式应该是忽略,这里假设所有左括号都将正确关闭,这里是所需的输出字符串
"input Yes Yes Yes [mk:[yes] [yes] [yes]] Yes [iif:[yes] [yes] [yes]]"
简而言之,这是我的问题,正则表达式可以理解“嵌套”模式吗?或者递归是完成此任务的绝对必要条件,而正则表达式根本不够
如果无法检测无限嵌套的正则表达式,那么像我的示例一样嵌套到第二级怎么样
最佳答案
编辑 1
正如 vks 指出的那样,这不能用正则表达式来完成,所以我编写了一个简单的程序,可以用 Java 为您做同样的事情:
public class Main {
public static String nestedReplace(String s) {
int nested =0,i=0;
StringBuilder o = new StringBuilder();
while(i<s.length())
{
if(nested==0 && s.regionMatches(i,"[yes]",0,4))
{
o.append("Yes");
i += 5;
continue;
}
else if(s.charAt(i) == '[')
nested++;
else if(s.charAt(i) == ']')
nested--;
o.append(s.charAt(i));
i++;
}
return new String(o);
}
public static void main(String[] args) {
System.out.println(nestedReplace("input [yes] [yes] [yes] [mk:[yes] [yes] [yes]] [yes] [iif:[yes] [yes] [yes]]"));
}
}
输出:
input Yes Yes Yes [mk:[yes] [yes] [yes]] Yes [iif:[yes] [yes] [yes]]
关于java - 字符串替换所有正则表达式模式以在嵌套时不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33294816/