用正则表达式查找函数?

时间:2011-08-16 04:16:42

标签: regex

在notepad ++中,对于各种编程语言有很多有用的语法突出显示,我想知道它是如何做到的。我想知道它如何区分函数的不同范围。

例如,它如何区分内部和外部函数?:

function myFunction(arguments){
    function functionInsideMyFunction(arguments){
        return 0;
    }
}

我确信这很简单,但我是正则表达式的新手,并且仍然有点理解它。

比如说,我想要一个正则表达式只匹配其他函数中没有的函数。我想获得myFunction,但不是functionInsideMyFunction。

2 个答案:

答案 0 :(得分:2)

不使用RegEx,使用称为词法分析器的东西。 Jedit的词法分析器是http://jflex.de词法分析器让我感到困惑,但你可以学习如果你想要的话。如果你使用java,你可以使用YourClass.class.whatev的类的内部结构,你甚至可以使用http://Commons.apache.org/bcel 操纵。 NotePad ++使用类似的东西。 RegEx根本不具备超出基本线和范围的扩展性。字符串解析

答案 1 :(得分:1)

正则表达式涵盖了一组功能语言,这些语言位于表达性的低端......有很多语言结构你能够使用正则表达式解析/解析,这里的一个很好的例子是balanced-parentheses-problem

您使用上面的函数定义所看到的内容基本上是相同的,使用'左括号'是function ...(...){和'右括号'是一个简单的}

使用正则表达式无法解决此问题,因为它属于一组具有更高表现力的语言(另请参阅Chomsky Hierarchy)。

解析上面的语言(乔姆斯基)级别3(这是正则表达式可以解析的)是正确的parser。存在许多不同的技术/算法,每种技术/算法都适用于具有某种表现力的语言。在这里解释这些可能有点过分,如果你想真正进入它我建议阅读context free grammarsLR-parsersLL-parsers(这些在解析编程时会被大量使用语言)。