POSIX与Perl正则对比:preg_match vs ereg,preg_replace vs ereg_replace

0 下载量 140 浏览量 更新于2024-08-31 收藏 82KB PDF 举报
"这篇文章除了介绍POSIX风格和Perl兼容风格的正则表达式主要函数外,还强调了在实际使用中的选择建议。文章提到了PHP中的ereg函数和ereg_replace函数作为POSIX风格正则表达式的主要代表,以及preg_match和preg_replace作为Perl兼容风格的代表。POSIX风格的ereg函数用于在字符串中查找匹配正则表达式的子串,返回匹配长度,而ereg_replace函数则用于执行正则表达式的替换操作。然而,文章建议使用Perl兼容的preg系列函数,因为它们通常具有更好的性能和更丰富的功能。在示例中,ereg函数用于解析和转换日期格式。" 在PHP中,正则表达式有两种主要的实现方式,即POSIX扩展和Perl兼容正则表达式(PCRE)。POSIX风格的正则表达式函数包括`ereg`和`ereg_replace`,而Perl兼容风格的函数则为`preg_match`和`preg_replace`。 1. ereg函数: - 函数签名:`int ereg(string pattern, string string [, array &regs])` - 这个函数以区分大小写的方式在`string`中查找与`pattern`匹配的子串。如果找到匹配,它会将匹配的子模式存储在`regs`数组中,其中`regs[0]`是整个匹配的字符串,`regs[1]`、`regs[2]`等依次对应于`pattern`中圆括号内子模式的匹配内容。 - 返回值:成功时返回匹配的子串长度,未找到匹配或出错时返回`FALSE`。若无`regs`参数或匹配长度为0,则返回1。 2. ereg_replace函数: - 函数签名:`string ereg_replace(string pattern, string replacement, string string)` - 它会在`string`中查找符合`pattern`的子串,并用`replacement`替换它们。`replacement`可以包含反斜杠转义的子串,如`\d`,来引用`pattern`中的子模式。 - 返回值:返回替换后的字符串,若没有匹配项则返回原字符串。 相比之下,Perl兼容的`preg_match`和`preg_replace`提供了更强大的功能和更丰富的正则表达式语法,因此在大多数情况下推荐使用这两个函数。`preg_match`支持全局匹配、多行模式等多种高级特性,而`preg_replace`则可以使用回调函数进行复杂替换逻辑,同时具备更高效的性能。 在文章给出的示例中,`ereg`被用于解析一个ISO格式的日期(YYYY-MM-DD),并将其转换为DD.MM.YYYY格式。这个例子展示了POSIX风格正则表达式如何捕获和提取子串,但同样功能可以使用`preg_match`来完成,而且可能效率更高。 虽然POSIX风格的正则表达式函数在早期的PHP版本中广泛使用,但随着技术的发展,Perl兼容的`preg`系列函数已成为主流选择,尤其是在需要更复杂正则表达式特性的场景下。