Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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正则表达式-解析函数名和参数名-抛出PatternSyntaxException:Unclosed字符_Java_Regex_Regex Lookarounds - Fatal编程技术网

Java正则表达式-解析函数名和参数名-抛出PatternSyntaxException:Unclosed字符

Java正则表达式-解析函数名和参数名-抛出PatternSyntaxException:Unclosed字符,java,regex,regex-lookarounds,Java,Regex,Regex Lookarounds,下面是我用来提取函数名的正则表达式 正则表达式 代码 final静态字符串函数nameregex=“^(\\w+(\\s+)?{2,}\\([^!@$+%^]*\\)”; final static String functionString=“public void render(int screenNo,String infoText){}”; final Pattern fnPattern=Pattern.compile(functionNameRegex,Pattern.CASE|u不区分

下面是我用来提取函数名的正则表达式

正则表达式

代码

final静态字符串函数nameregex=“^(\\w+(\\s+)?{2,}\\([^!@$+%^]*\\)”;
final static String functionString=“public void render(int screenNo,String infoText){}”;
final Pattern fnPattern=Pattern.compile(functionNameRegex,Pattern.CASE|u不区分大小写| Pattern.COMMENTS);
最终匹配器fnmacher=fnPattern.Matcher(functionString);
while(fnMatcher.find()){
System.out.println(“完全匹配:+fnMatcher.group(0));

对于(inti=1;i您使用编译正则表达式,并且在模式中有一个
符号。您需要对其进行转义,否则,它表示注释的开始

使用


也可以考虑将<代码>(\W+(\s+)?){ 2,} /代码>改为<代码>(\\W+(?:\s++\W+)+<代码> >如果您计划匹配2个或更多空间分隔的单词(它将工作得更快)(组1在括号之前仍然保持值)

使用


也可以考虑将<代码>(\W+(\s+)?){ 2,} /代码>改为<代码>(\\W+(?:\s++\W+)+<代码> >如果您计划匹配2个或更多空间分隔的单词(它将工作得更快)(组1在括号之前仍然保持值).

谢谢。这很有帮助。请提供有关重新更改此正则表达式以捕获参数名称的输入。@surendhar\u我们看,对不起,我不确定您需要什么。谢谢。这很有帮助。请提供有关重新更改此正则表达式以捕获参数名称的输入。@surendhar\u\u我们看,对不起,我不确定您需要什么。
^(\w+(\s+)?){2,}\([^!@#$+%^]*\)
final static String functionNameRegex = "^(\\w+(\\s+)?){2,}\\([^!@#$+%^]*\\)";
final static String functionString = "public void render(int screenNo, String infoText){}";


final Pattern fnPattern = Pattern.compile(functionNameRegex, Pattern.CASE_INSENSITIVE | Pattern.COMMENTS);
final Matcher fnMatcher = fnPattern.matcher(functionString);

while (fnMatcher.find()) {
       System.out.println("Full match: " + fnMatcher.group(0));
       for (int i = 1; i <= fnMatcher.groupCount(); i++) {
             System.out.println("Group " + i + ": " + fnMatcher.group(i));
       }
}
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 30
^(\w+(\s+)?){2,}\([^!@#$+%^]*\)
                              ^
    at java.util.regex.Pattern.error(Pattern.java:1955)
    at java.util.regex.Pattern.clazz(Pattern.java:2548)
    at java.util.regex.Pattern.sequence(Pattern.java:2063)
    at java.util.regex.Pattern.expr(Pattern.java:1996)
    at java.util.regex.Pattern.compile(Pattern.java:1696)
    at java.util.regex.Pattern.<init>(Pattern.java:1351)
    at java.util.regex.Pattern.compile(Pattern.java:1054)
    at TestRegex.main(TestRegex.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
final static String functionNameRegex = "^(\\w+(\\s+)?){2,}\\([^!@\\#$+%^]*\\)";