一尘不染

如何在PHP中将ereg表达式转换为preg?

php

由于自PHP
5.3.0起不赞成使用POSIX正则表达式,所以我想知道一种将旧表达式转换为[PCRE(与Perl兼容的正则表达式)的简便方法。

例如,我有这个正则表达式:

eregi('^hello world');

如何将表达式转换为preg_match兼容的表达式?

注意: 此职位充当与从ereg到preg转换相关的所有职位的占位符,并用作相关问题的重复选项。请不要关闭此问题。

有关:

  • 如何将PHP的eregi更改为preg_match
    * 将ereg_replace更改为等效的preg_replace

阅读 290

收藏
2020-05-26

共1个答案

一尘不染

语法上的最大变化是添加了定界符。

ereg('^hello', $str);
preg_match('/^hello/', $str);

分隔符几乎可以是任何非字母数字,反斜杠或空格字符的内容。最常用的一般是~/#

您也可以使用匹配的括号:

preg_match('[^hello]', $str);
preg_match('(^hello)', $str);
preg_match('{^hello}', $str);
// etc

如果在正则表达式中找到分隔符,则必须对其进行转义:

ereg('^/hello', $str);
preg_match('/^\/hello/', $str);

您可以使用preg_quote轻松转义字符串中的所有定界符和保留字符:

$expr = preg_quote('/hello', '/');
preg_match('/^'.$expr.'/', $str);

另外,PCRE支持用于各种事物的修饰符。最常用的一种是不区分大小写的修饰符i,它是eregi的替代品:

eregi('^hello', 'HELLO');
preg_match('/^hello/i', 'HELLO');

您可以在手册找到有关PHPE语法的完整参考,以及POSIX正则表达式和PCRE之间的差异列表,以帮助转换表达式。

但是,在您的简单示例中,您将不使用正则表达式:

stripos($str, 'hello world') === 0
2020-05-26