我需要一个正则表达式来过滤变量短语的声明
我需要包含int
或char
的短语,而不是函数调用。
int a;
char b;
int func(int a);
结果应匹配int a
和char b
,但不匹配int func(int a)。
我做了类似
[int | char] \ s * [a-zA-Z_] [a-zA-Z_0-9] * [?!\\(。* \\)]
哪个不正常。 感谢。
答案 0 :(得分:1)
尝试使用正则表达式:
(?:int|char)\s+\w+\s*(?=;)
答案 1 :(得分:1)
尝试这种方式
"(int|char)\\s+[a-zA-Z_]\\w*\\s*(?=[;=])"
(int|char)
表示int
或char
,您的版本[int|char]
表示i
,n
,t
之一{ {1}},|
,c
,h
,a
字符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));
}