Java Regex:匹配行的开头

时间:2013-11-26 00:12:05

标签: java regex

我正在阅读许多文本文件,这些文件是电子邮件的转储。我正在尝试检查我正在阅读的行是否以“抄送:”开头。例如,我想匹配以下示例行“Cc:\ temail1@example.com; email2@exmaple.com”。

我使用的代码如下所示:

Pattern pattern = Pattern.compile("^Cc\\:");
line = reader.readLine();

if (pattern.matcher(line).matches()) {
   System.out.println(line);
}

知道为什么这不匹配?

1 个答案:

答案 0 :(得分:3)

你的正则表达式本身并没有什么问题(虽然你已经不必要地逃过了冒号,但是仍然可以工作)但是它不起作用的原因是在java中(与大多数其他流行语言不同)matches()必须匹配整个字符串。将正则表达式更改为"Cc:.*"。注意在java中你不需要^或$因为必须匹配整个字符串而隐含它们。

但是,对于使用正则表达式进行更简单的不区分大小写的检查:

if (line.matches("(?i)cc:.*")) // note the .*

或没有正则表达式:

if (line.toLowerCase().startsWith("cc:"))