为什么这个正则表达式不匹配?

时间:2011-07-06 14:57:48

标签: java regex

在使用java的String.matches方法时,我无法找出为什么我的正则表达式与行不匹配 - 它在在线正则表达式测试器上匹配。

这是Java代码:

line.trim().replaceAll(" +", " ").matches("(const )?[a-zA-Z0-9\\*]*\\ [a-zA-Z0-9\\*]*[,|)]");

和应该匹配的行:

bool fLoad)   // somecomment

有没有人知道为什么会这样?

3 个答案:

答案 0 :(得分:4)

matches()表示它应该与完全匹配,即整个字符串符合RE。您的RE在')'后不允许任何内容。请尝试使用find()代替matches()

答案 1 :(得分:1)

Java的String.match()不能像许多其他语言一样实现它:整个输入必须匹配,所以将.*添加到正则表达式的每一端:

line.trim().replaceAll(" +", " ").matches(".*(const )?[a-zA-Z0-9\\*]*\\ [a-zA-Z0-9\\*]*[,|)].*");

我对此进行了测试,您的示例行从true

返回matches()

答案 2 :(得分:1)

好像你试图在源代码中匹配某种变量声明。

在你的正则表达式中,在我想象的与“const(可选)数据类型”相匹配的部分之后你就有了这个:

"(const )?[a-zA-Z0-9\\*]*\\ "

空间有意前是\\吗?您的意思是匹配单个\吗?