java pattern.compile中的表达式

时间:2014-06-14 14:35:40

标签: java regex

我在java Pattern中使用了两次来获取特定值。 它在第一个工作正常,但不在第二个工作。

我的代码

public static void main(String[] args) throws IOException {
    final String path = "E://farhad.txt";
    FileReader fr = new FileReader(path);
    BufferedReader br = new BufferedReader(fr);
    String line;
    Pattern pattern = Pattern.compile("\\bCBM_Component_", Pattern.CASE_INSENSITIVE);
    while ((line = br.readLine()) != null) {
        Matcher matcher = pattern.matcher(line);
        String[] splitArray = new String[3];
        while (matcher.find()) {
            int i = 0;
            for (String retval : line.split("\"", 3)) {
                splitArray[i] = retval;
                i++;
            }
            System.out.println("CBM name: " + splitArray[1]);
            System.out.println("CBM number: " + splitArray[2].substring(2, splitArray[2].length() - 1));

            line = br.readLine();
            pattern = Pattern.compile("\\bAccountability:\\b", Pattern.CASE_INSENSITIVE);
            matcher = pattern.matcher(line);
            while (!matcher.find()) {
                line = br.readLine();
            }
        }
    }
    fr.close();
}

}

我的文件

View of the Model "CBM_Component_Account Reconciliation" (CBP10609)
===================================================================
      CBM Component
      Accountability: Execute
      Control Element:  Accounting Entity to Accounting Entity
      Relationship

从第一个模式(CBM_Component_)它工作正常,但在第二个模式(Accountability:)它没有做任何事情。 我必须做什么 谢谢

1 个答案:

答案 0 :(得分:0)

问题归结为 - 为什么Pattern.compile("\\bAccountability:\\b", Pattern.CASE_INSENSITIVE)与文字不匹配:Accountability: Execute

这是因为您错误地使用了字边界匹配器\b(在":"字符之后的模式末尾)。当您从模式的末尾移除边界匹配器时,您将获得预期的结果。

有关字边界匹配器如何工作的更多信息: Use of \b Boundary Matcher In Java