Java 不考虑空间的正则表达式
我有以下java正则表达式-Java 不考虑空间的正则表达式,java,regex,Java,Regex,我有以下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 IOExc
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);
}
}
我想你的意思是找到一个备选方案,然后再加上一个空格和一个单词 但是 您可以从列表中看到,
\s\w
仅适用于字符
选项
若要解决此问题,请将\s\w
带到组外,使其适用于所有替代方案
(?:
int
| # or,
float
| # or,
char
)
\s \w
最后一个正则表达式是
“(?:int | float | char)\\s\\w”
用括号括住选项,如下所示:
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”是某个单词结尾的情况。不是重复的,引用的问题是关于greedyness,这是关于操作符的优先级。试着发布一个你想阅读的文件内容,以帮助回答重复的问题。你所需要的只是
“int\\b | float | char\\s\\w”
,以避免在intern
中匹配int
。我想你可以使用类似(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)*");