字符串表达式未与Java正则表达式匹配的字符串宽

时间:2019-01-05 19:41:51

标签: java regex

我正在尝试匹配以下字符串:

÷7%3@x#2$+÷5%3@x#2$-4

具有以下匹配项:

string = string.replaceAll("÷(.+)%(.+)@x#([0-9]+)\\$","÷$1x#$3\\$%$2@");

从上面的调用中,我看到:$1 = (.+) and $2 = (.+) and $3 = ([0-9]+)

在调用replaceAll之后:字符串已更改为:     ÷7%3@x#4$+÷5x#2$%3@-4

注意,该正则表达式仅应用于÷5%3@x#2$,而不应用于÷7%3@x#2$

我需要正则表达式来匹配整个表达式。

正则表达式可能有什么问题?

1 个答案:

答案 0 :(得分:0)

我要发布此答案,这是关于要完成的工作的有效方法。 不是解决问题的最优雅的方法,但是它可以工作。

在我的回答中,我使用Pattern和Matcher类对每次出现的正则表达式进行范围划分,然后将它们替换为Pattern和Matcher找到它们中的每一个。

Pattern pattern = Pattern.compile("÷.+?%.+?@x#\\d+\\$");
Matcher matchk = patternk.matcher(string);
while(matchk.find()){
String string1 = matchk.group();
String string2 = string1;
string2 = string2.replaceAll("÷(.+)%(.+)@x#(\\d+)\\$","÷$1x#$3\\$%$2@");
string = string.replace(string1,string2);}

结果是我想要获取的格式化字符串。