正则表达式包含java中的括号的字符串

时间:2013-07-25 16:51:47

标签: java regex

我需要一个正则表达式来过滤变量短语的声明 我需要包含intchar的短语,而不是函数调用。

int a;
char b;
int func(int a);

结果应匹配int achar b,但不匹配int func(int a)。 我做了类似

的事情
  

[int | char] \ s * [a-zA-Z_] [a-zA-Z_0-9] * [?!\\(。* \\)]

哪个不正常。 感谢。

5 个答案:

答案 0 :(得分:1)

尝试使用正则表达式:

(?:int|char)\s+\w+\s*(?=;)

答案 1 :(得分:1)

尝试这种方式

"(int|char)\\s+[a-zA-Z_]\\w*\\s*(?=[;=])"
  • (int|char)表示intchar,您的版本[int|char]表示int之一{ {1}},|cha字符
  • r一个或多个空格
  • \\s+ a-Z字母之一或[a-zA-Z_]
  • _ \\w*零或更多,表示a-Z字母,[a-zA-Z_0-9]或数字
  • _可选空格
  • \\s*测试后面是(?=[;=])还是;(此部分不会包含在匹配中)

它适用于

等数据
=

并会找到int a; char b = 'c'; int func(int a); int a

演示

char b

答案 2 :(得分:1)

这个正则表达式

(int|char)\s+\w+\s*;

将匹配您需要的内容(“包含int或char的短语,而不是函数调用”),即使使用“怪异”间距也是如此。在

int      a       ;
char  b;
int func(int a);

它匹配两个第一行(完全一样)。

答案 3 :(得分:0)

你可以做这样的事情

(int|char)\s*\w+\b(?!\s*\()

答案 4 :(得分:0)

试试这个

    String a="char a";
    Pattern p= Pattern.compile("(int|char)\\s*\\w+(?![^\\(;]*\\))");
    Matcher m=p.matcher(a);
    if (m.find()){
        System.out.println(m.group(0));
    }