Java 除第一个外的正则表达式
嗨,我有这样的字符串:Java 除第一个外的正则表达式,java,regex,Java,Regex,嗨,我有这样的字符串: %a%%%%%bc%%%d% a%bc%d Pattern p = Pattern.compile("%([^%]+%)%*([^%]*%)%*([^%]+)%"); Matcher m = p.matcher(input); if(m.matches()) { System.out.println(m.group(1) + m.group(2) + m.group(3)); } else { System.err.println("The patte
%a%%%%%bc%%%d%
a%bc%d
Pattern p = Pattern.compile("%([^%]+%)%*([^%]*%)%*([^%]+)%");
Matcher m = p.matcher(input);
if(m.matches()) {
System.out.println(m.group(1) + m.group(2) + m.group(3));
} else {
System.err.println("The pattern didn't match");
}
我需要将字符串开头和结尾的第一个%和最后一个%替换为“”。
我还需要替换所有的%+,除了每个字符串序列组的第一个%+
结果应该是这样的:
%a%%%%%bc%%%d%
a%bc%d
Pattern p = Pattern.compile("%([^%]+%)%*([^%]*%)%*([^%]+)%");
Matcher m = p.matcher(input);
if(m.matches()) {
System.out.println(m.group(1) + m.group(2) + m.group(3));
} else {
System.err.println("The pattern didn't match");
}
我如何处理正则表达式?我试过这样的方法:*?%(\W+)%
,但没有成功
谢谢。您可以使用
.replaceAll("^%|%$|(%)+", "$1")
见
详细信息:
-字符串开头的^%
匹配%
-或|
-字符串末尾的%$
%
-或|
-一个重复的捕获组,它匹配1+(%)++
符号,但在每次迭代到组1时只捕获一个%
,之后,对该组的%
反向引用将多个$1
字符替换为1个%
%
- Wiktor的解决方案很好。但是,如果您需要知道输入是否与模式匹配,您可能希望尝试以下解决方案:
%a%%%%%bc%%%d%
a%bc%d
Pattern p = Pattern.compile("%([^%]+%)%*([^%]*%)%*([^%]+)%");
Matcher m = p.matcher(input);
if(m.matches()) {
System.out.println(m.group(1) + m.group(2) + m.group(3));
} else {
System.err.println("The pattern didn't match");
}
请提供更多信息。你的字符串是完整的还是会在一段较长的时间内出现,在之前和/或之后?