在使用java的String.matches方法时,我无法找出为什么我的正则表达式与行不匹配 - 它在在线正则表达式测试器上匹配。
这是Java代码:
line.trim().replaceAll(" +", " ").matches("(const )?[a-zA-Z0-9\\*]*\\ [a-zA-Z0-9\\*]*[,|)]");
和应该匹配的行:
bool fLoad) // somecomment
有没有人知道为什么会这样?
答案 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\\*]*\\ "
空间有意前是\\
吗?您的意思是匹配单个\
吗?