Java 这个模式匹配代码有什么问题吗?
我想知道这个代码是否有任何错误,以匹配模式Java 这个模式匹配代码有什么问题吗?,java,regex,string,loops,Java,Regex,String,Loops,我想知道这个代码是否有任何错误,以匹配模式 F_4(a,r;c,y;x,d) 或 它应该将具有F_4的任何东西(某物,某物;某物,某物;某物,某物)与表示某物的任何字符串或字符相匹配。谢谢 while(line.contains("F_4")){ Pattern appellfiv = Pattern.compile("F_4[^(]*\\(([^,]+),([^;]+);([^,]+),([^;]+);([^,]+),([^)]+)\\)"); Match
F_4(a,r;c,y;x,d)
或
它应该将具有F_4的任何东西(某物,某物;某物,某物;某物,某物)与表示某物的任何字符串或字符相匹配。谢谢
while(line.contains("F_4")){
Pattern appellfiv = Pattern.compile("F_4[^(]*\\(([^,]+),([^;]+);([^,]+),([^;]+);([^,]+),([^)]+)\\)");
Matcher appellmatch = appellfiv.matcher(line);
while(appellmatch.find()) {
line = appellmatch.replaceAll("\\AppellFiv@{$1}{$2}{$3}{$4}{$5}{$6}");
}
}
最后一个参数是
\frac{v}{(1-x)}\right
并包含)
,因此不能将[^]+
用作最后一个参数的正则表达式。您可以尝试使用[^,;]+
或+
正则表达式作为最后一个参数
更新
以下代码适用于您的第一个案例:
String line = "F_4(a,r;c,y;x,d);F_4(z,p;o,q;m,n);";
line = line.replaceAll("F_4[^(]*\\(([^,]+),([^;]+);([^,]+),([^;]+);([^,]+),([^)]+)\\)", "\\AppellFiv@{$1}{$2}{$3}{$4}{$5}{$6}");
这是一个你可以试试的正则表达式。它的功能与您的相同,但
改革放松文本要求,同时收紧delimeters
# "F_4[^(;,]*\\(([^,]*),(?:([^;,]*)(?:;([^,]*))?),(?:([^;,]*)(?:;([^,]*))?),([^)]*)\\)"
F_4
[^(;,]*
\(
( [^,]* ) # (1)
,
(?:
( [^;,]* ) # (2)
(?:
;
( [^,]* ) # (3)
)?
)
,
(?:
( [^;,]* ) # (4)
(?:
;
( [^,]* ) # (5)
)?
)
,
( [^)]* ) # (6)
\)
@RohitJain,我正在尝试使用matcher.find方法和matcher.replaceFirst用F_4{something}{something}{something}{something}{something}{something}{something}替换此模式的所有实例。但是,它不会转换任何实例。我认为模式可能有问题。嗯,你的正则表达式在第一个示例字符串上工作。您是否调用了正确的正则表达式函数?这种方法还存在其他一般性问题。第一,你一遍又一遍地编译同一个正则表达式。2.逗号
,
上有一个自然的分隔符,所以你不应该尝试用分号来分解它,而是分开进行。3.使用+
量词时,应使用*
。4.不知道是否必须匹配整行。代码是否进入循环?你能解释一下在你创建appellmatch
之后你用line
做什么吗?@UlugbekUmirov,在我创建了匹配之后,我试着用F_4{something}{something}{something}{something}{something}{something}{something}{something}{something}{。我将更新我的代码以包含替换项。是的,我知道这一点。我正在使用嵌套括号的解析器来解决这个问题。但是,如果参数没有嵌套的括号,它仍然不匹配。谢谢。你能解释一下“(?:”和“)?”是做什么的吗?为什么要使用[^;,]*而不是[^;]*?@user2825125-当然。在[^;,]
中,not,
将停止通过下一个主要逗号分隔符,而不是代码>是为了阻止它通过下一个小分号delimeter<代码>(?:..)
是可选的群集组。捕获组仍然相同。基本上,如果代码>丢失,它仍然与其他所有内容匹配,并且顺序正确。
# "F_4[^(;,]*\\(([^,]*),(?:([^;,]*)(?:;([^,]*))?),(?:([^;,]*)(?:;([^,]*))?),([^)]*)\\)"
F_4
[^(;,]*
\(
( [^,]* ) # (1)
,
(?:
( [^;,]* ) # (2)
(?:
;
( [^,]* ) # (3)
)?
)
,
(?:
( [^;,]* ) # (4)
(?:
;
( [^,]* ) # (5)
)?
)
,
( [^)]* ) # (6)
\)