我的程序没有显示所需的匹配结果。我的文本文件包含以下行:
- 红色汽车
- 蓝色或红色
- 红色
- 汽车
因此,如果我搜索:"红色汽车"。我只将"红色汽车"视为唯一的结果,但是我想要的是获得以下结果:
- 红色汽车
- 红色
- 红色
- 汽车
因为这些字符串在文本文件中。蓝色或红色,"或"是逻辑的。因此,我想匹配其中的任何一个,而不是两者兼而有之。我究竟做错了什么? 任何帮助都将受到赞赏。我的代码如下:
public static void main(String[] args) {
// TODO code application logic here
//String key;
String strLine;
try{
// Open the file that is the first
// command line parameter
FileInputStream fstream = new FileInputStream("C:\textfile.txt");
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
Scanner input = new Scanner (System.in);
System.out.print("Enter Your Search: ");
String key = input.nextLine();
while ((strLine = br.readLine()) != null) {
Pattern p = Pattern.compile(key); // regex pattern to search for
Matcher m = p.matcher(strLine); // src of text to search
boolean b = false;
while(b = m.find()) {
System.out.println( m.start() + " " + m.group()); // returns index and match
// Print the content on the console
}
}
//Close the input stream
in.close();
}catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
}
尝试传递此正则以下: -
"((?:Red)?\s*(?:or)?\s*(?:Car)?)"
这将匹配: -
0 or 1
红色,然后是0 or more
空间,然后是0 or 1
CAR
(?:...)
是非捕获组
注意: - 上面的正则义务不匹配:- Car Red
。
如果您的订单可以反向,则可以使用: -
"((?:Red|Car)?\s*(?:or)?\s*(?:Red|Car)?)"
并从group(0)
进行完整匹配。
例如: -
String strLine = "Car or Red";
Pattern p = Pattern.compile("((?:Red|Car)?\s*(?:or)?\s*(?:Red|Car)?)");
Matcher m = p.matcher(strLine); // src of text to search
if (m.matches()) {
System.out.println(m.group()); // returns index and match
}
输出: -
Car or Red
当您想匹配完整的字符串时,用while(b = m.find())
替换您的CC_7。
您的模式应为Red|Car
。