我不知道如何在java中使用这个正则表达式
我有下一个正则表达式,当我在中在线测试时它可以工作:但在我的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
(?: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}
必须正好出现4次a
-表示a{2,4}
必须出现2、3或4次a
-表示a{2,}
必须出现2次或更多次李>a
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("")