Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我不知道如何在java中使用这个正则表达式_Java_Android_Regex - Fatal编程技术网

我不知道如何在java中使用这个正则表达式

我不知道如何在java中使用这个正则表达式,java,android,regex,Java,Android,Regex,我有下一个正则表达式,当我在中在线测试时它可以工作:但在我的java项目上不起作用: (?:function jo|[{;]jo\s*=\s*function)\((.*?[a-z,]+)\){(.*?[^}]+)} 我的代码: Pattern p2 = Pattern.compile("(?:function "+funcname+"|[{;]"+funcname+"\\s*=\\s*function)\\((.*?[a-z,]+)\\){(.*?[^}]+)}"); 我的错误: 07-2

我有下一个正则表达式,当我在中在线测试时它可以工作:但在我的java项目上不起作用:

(?:function jo|[{;]jo\s*=\s*function)\((.*?[a-z,]+)\){(.*?[^}]+)}
我的代码:

Pattern p2 = Pattern.compile("(?:function "+funcname+"|[{;]"+funcname+"\\s*=\\s*function)\\((.*?[a-z,]+)\\){(.*?[^}]+)}");
我的错误:

07-23 23:43:17.608: E/AndroidRuntime(1724): (?:function jo|[{;]jo\s*=\s*function)\((.*?[a-z,]+)\){(.*?[^}]+)}
07-23 23:43:17.608: E/AndroidRuntime(1724):                                                        ^
我的示例测试字符串:

{return a.reverse()}};function jo(a){a=a.split("");a=io.aS(a,53);a=io.Y7(a,19);a=io.aS(a,9);a=io.km(a,2);a=io.Y7(a,29);a=io.km(a,1);return a.join("")};function ko(){};var lo
我想摘录这部分:

a=a.split("");a=io.aS(a,53);a=io.Y7(a,19);a=io.aS(a,9);a=io.km(a,2);a=io.Y7(a,29);a=io.km(a,1);return a.join("")
非常感谢,我对正则表达式非常着迷。

我只想说,使用正则表达式解析代码不是最好的主意。您应该搜索解析器并使用它

似乎您忘记了在正则表达式末尾转义
{
}
。您需要对它们进行转义,因为它们是正则表达式元字符,用于指定某个对象的显示次数

  • a{4}
    -表示
    a
    必须正好出现4次
  • a{2,4}
    -表示
    a
    必须出现2、3或4次
  • a{2,}
    -表示
    a
    必须出现2次或更多次
试一试

Pattern p2 = Pattern.compile("(?:function " + funcname + "|[{;]"
        + funcname + "\\s*=\\s*function)\\((.*?[a-z,]+)\\)\\{(.*?[^}]+)\\}");
// parts changed                                          ^^^          ^^^
演示:

输出:

a=a.split("");a=io.aS(a,53);a=io.Y7(a,19);a=io.aS(a,9);a=io.km(a,2);a=io.Y7(a,29);a=io.km(a,1);return a.join("")

谢谢正则表达式很复杂,在java中使用它们更困难:)我想添加我必须添加到extratc 2st组。我更新了答案,添加了如何获取所需部件的示例。通常,最好使用解析器来解析代码。如果您的代码包含一些内部类或nexted块,您将无法使用正则表达式。
a=a.split("");a=io.aS(a,53);a=io.Y7(a,19);a=io.aS(a,9);a=io.km(a,2);a=io.Y7(a,29);a=io.km(a,1);return a.join("")