为什么这个Java正则表达式不能编译?

时间:2013-07-25 11:30:48

标签: java regex

我正在尝试从以下任何格式的字符串中提取传递号码:

PassID_132
PassID_64
Pass_298
Pass_16

为此,我构建了以下正则表达式:

Pass[I]?[D]?_([\d]{2,3})

- 并在Eclipse的搜索对话框中对其进行了测试。它运作良好。

但是,当我在代码中使用它时,它与任何东西都不匹配。这是我的代码片段:

String idString = filename.replaceAll("Pass[I]?[D]?_([\\d]{2,3})", "$1");
int result = Integer.parseInt(idString);

我也试过

java.util.regex.Pattern.compile("Pass[I]?[D]?_([\\d]{2,3})")
调试时表达式窗口中的

,但是说“”,而

java.util.regex.Pattern.compile("Pass[I]?[D]?_([0-9]{2,3})")

编译,但没有匹配任何东西。可能是什么问题?

2 个答案:

答案 0 :(得分:2)

而不是通过[I]?[D]?_([\ d] {2,3})试试这个:

Pass(?:I)?(?:D)?_([\d]{2,3})

答案 1 :(得分:1)

你的tegex没有无效,但它很糟糕。您不需要围绕单个字符术语的字符类。试试这个:

"Pass(?:ID)?_(\\d{2,3})"