带有正则表达式的代码似乎无缘无故地结束

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 是要搜索的Stringlines[i + 1] 是下一行,我创建了一个记录器对象来记录编译。

在 Eclipse 中使用调试器,我发现当涉及到带有注释的行时,它会跳转到 Pattern 类,然后就停止了。我的意思是它会打开一个带有Pattern 类源的新选项卡,下一步它会终止,而没有给出任何合乎逻辑的理由,或者根本没有任何理由。

我的正则表达式有问题吗? (它会尝试搜索这样的字符串:interface ,而 else if 语句会寻找替代项:

interface

我认为那里可能有问题,我尝试重新启动 Eclipse,但它没有帮助。

如果需要更多代码,只需发表评论告诉我。

【问题讨论】:

“s”只是“interface ”,还是包含更多内容? 【参考方案1】:

是需要转义的特殊元正则表达式字符。使用这个正则表达式:

s.matches("\\s*interface\\s*\\\\s*")

【讨论】:

用于定义repetition,即.1,3

以上是关于带有正则表达式的代码似乎无缘无故地结束的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配关闭的 HTML 标记

带有正则表达式的 CSS2 属性选择器

如何使用带有线锚的 C# 正则表达式 Lookbehind

什么是正则表达式来替换/删除 END 之前没有未结束的 START?

带有变量的 Django URL 正则表达式

JSLint - 带有变量的正则表达式的错误转义