繁体   English   中英

此模式匹配代码有什么问题吗?

[英]Is there anything wrong with this pattern matching code?

我想知道这段代码是否与模式匹配有问题

 F_4(a,r;c,y;x,d) 

要么

F_4\left(a,b;b,b;\frac{-xy}{(1-y)},\frac{v}{(1-x)}\right)

应该将具有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}");

这是您可以尝试的正则表达式。 它与您的功能相同,但
进行了改革,以放宽文字要求,同时收紧间距。

 #  "F_4[^(;,]*\\(([^,]*),(?:([^;,]*)(?:;([^,]*))?),(?:([^;,]*)(?:;([^,]*))?),([^)]*)\\)"

 F_4
 [^(;,]* 
 \(
 ( [^,]* )               # (1)
 ,
 (?:
      ( [^;,]* )         # (2)
      (?:
           ;
           ( [^,]* )     # (3)
      )?
 )
 ,
 (?:
      ( [^;,]* )         # (4)
      (?:
           ;
           ( [^,]* )     # (5)
      )?
 )
 ,
 ( [^)]* )               # (6)
 \)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM