探秘正则表达式

       今天有个同事问起,php中的正则语法为何和perl中的正则语法如此的相似,是谁兼容谁?到底正则是什么?因此有了这篇文章php

       在咱们的平常工做中,不管是在php中用正则匹配字符串,仍是nginx用正则重写url,仍是在vi中查找字符,老是,用处不少也很方便。mysql

       那到底什么是正则表达式?为何各个应用中正则的语法大都相同?下面咱们来讲一下这几个问题nginx

       历史由来:最初的正则表达式出现于理论计算机科学的自动控制理论和形式化语言理论中。在这些领域中有对计算(自动控制)的模型和对形式化语言描述与分类的研究。1940年,Warren McCulloch与Walter Pitts将神经系统中的神经元描述成小而简单的自动控制元。1950年代,数学家斯蒂芬·科尔·克莱尼利用称之为“正则集合”的数学符号来描述此模型。肯·汤普逊将此符号系统引入编辑器QED,而后是Unix上的编辑器ed,并最终引入grep。自此,正则表达式被普遍地使用于各类Unix或者相似Unix的工具,例如Perl。Perl的正则表达式源自于Henry Spencer写的regex,它已经演化成了pcre(Perl兼容正则表达式,Perl Compatible Regular Expressions),一个由Philip Hazel开发的,为不少现代工具所使用的库。正则表达式

         你们都明白了吧,咱们在ed、grep、perl中使用的正则都是在这几个程序中独立实现的,而在咱们的nginx、php、mysql等各类语言系统或应用中都是引用pcre库函数,同时pcre的库函数也支持posix协议,方便外部应用的统一调用,这也是咱们为何安装这些软件的时候机器上要安装pcre软件包。算法

        总而言之,正则表达式是用必定语法的字符串来匹配符合规则的字符串的一种思惟方式,不管采用哪一种实现的引擎,内部采用何种算法,都是为了更方便更快速的查找到咱们须要的东西,至因而独立实现仍是引用写好的库函数更不是那么的重要了。至于语法的大同小异,也是因为各类应用下不一样的状况下具体定制的,知道就能够了。sql

相关文章
相关标签/搜索