带有正则表达式的代码似乎无缘无故地结束
Posted
技术标签:
【中文标题】带有正则表达式的代码似乎无缘无故地结束【英文标题】:Code with regex seems to end for no reason 【发布时间】:2014-07-09 05:58:02 【问题描述】:我写了一段代码来“编译”一个文件(主要是为了我自己的练习)。它首先将文件中的所有行加载到 RAM 中,然后读取文件。为了理解其中的内容,我使用了带有String.matches()
和String.contains()
方法的正则表达式。现在我遇到了一个非常奇怪的问题,这是我以前从未遇到过的:程序没有任何充分的理由就结束了。它不会给出错误或异常,或任何其他可能有问题的指示。
这是我要说的部分:
else if (s.contains("interface"))
if (s.matches("\\s*interface\\s*\\s*")) //The program seems to stop on this line
logger.info("Found properties block opener on line " + (i + 1) + ": " + s);
else if (s.matches("\\s*interface\\s*"))
if (lines[i + 1].matches("\\s*\\s*"))
logger.info("Found properties block opener on lines " + (i + 1) + " and " + (i + 2) + ": " + s);
s
是要搜索的String
,lines[i + 1]
是下一行,我创建了一个记录器对象来记录编译。
在 Eclipse 中使用调试器,我发现当涉及到带有注释的行时,它会跳转到 Pattern
类,然后就停止了。我的意思是它会打开一个带有Pattern
类源的新选项卡,下一步它会终止,而没有给出任何合乎逻辑的理由,或者根本没有任何理由。
我的正则表达式有问题吗? (它会尝试搜索这样的字符串:interface
,而 else if
语句会寻找替代项:
interface
我认为那里可能有问题,我尝试重新启动 Eclipse,但它没有帮助。
如果需要更多代码,只需发表评论告诉我。
【问题讨论】:
“s”只是“interface ”,还是包含更多内容? 【参考方案1】: 是需要转义的特殊元正则表达式字符。使用这个正则表达式:
s.matches("\\s*interface\\s*\\\\s*")
【讨论】:
用于定义repetition,即.1,3
以上是关于带有正则表达式的代码似乎无缘无故地结束的主要内容,如果未能解决你的问题,请参考以下文章