Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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 不考虑空间的正则表达式_Java_Regex - Fatal编程技术网

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

我有以下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);
    }
}

我想你的意思是找到一个备选方案,然后再加上一个空格和一个单词

但是

您可以从列表中看到,
\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)*");