我在java中有以下正则表达式 -
Pattern p = Pattern.compile("int|float|char\\s\\w");
但这仍然匹配“intern
”。
整个代码 -
package regex;
import java.io.*;
import java.util.*;
import java.util.regex.*;
public class Regex {
public static void main(String[] args) throws IOException{
// TODO code application logic here
int c = 0;
BufferedReader bf = new BufferedReader(new FileReader("new.c"));
String line;
Pattern p = Pattern.compile("int|float|char\\s\\w");
Matcher m;
while((line = bf.readLine()) != null) {
m = p.matcher(line);
if(m.find()) {
c++;
}
}
System.out.println(c);
}
}
答案 0 :(得分:1)
我认为你的意思是找到一个替代方案,然后是一个空格和一个单词。
但是
(?:
int
| # or,
float
| # or,
char \s \w
)
您可以从列表中看到\s\w
仅适用于char
替代方案。
要解决此问题,请将该组的\s\w
置于之外,以便它适用于所有
替代方案。
(?:
int
| # or,
float
| # or,
char
)
\s \w
最后的正则表达式是"(?:int|float|char)\\s\\w"
答案 1 :(得分:0)
用括号括起选项,如下所示:
Pattern p = Pattern.compile("(int|float|char)\\s\\w");
此外,如果您想要覆盖一些边缘情况以处理一些格式错误的代码,您可以使用:
Pattern p = Pattern.compile("^(\\s|\\t)*(int|float|char)(\\s|\\t)+[a-zA-Z_][a-zA-Z0-9_]*(\\s|\\t)*");
这应该涵盖类型和变量名之间有多个空格或制表符的情况,并且还包括以下划线开头的变量名称,以及“int”“float”或“char”是某些结尾的情况字。