在PHP中将Posix正则表达式转换为PCRE


Converting Posix Regex to PCRE in PHP

我有一个cms,在前端按id抓取页面,如下所示:

$pageid = ereg_replace("[^0-9]", "", $_GET['pid']);

这是我试图更新的一些旧代码,因为POSIX已被弃用,但是我的转换(使用preg_replace)的努力没有成功。如果有人能帮我转换这句话,我将不胜感激。

添加注释代码

我的第一个猜测是类似

的东西
$pageid = preg_replace("/[^0-9]/","",$_GET['pid']; 

会产生错误,所以我进一步将其简化为

$pageid = preg_replace("/^0-9/","",$_GET['pid'] 

请原谅,我对正则表达式的理解相当有限。

让我们来解释一下posix模式的作用。

[^0-9]

[是字符类的开始,]是字符类的结束。当字符类以^开头时,这意味着它是颠倒的(=匹配除了列出的内容之外的所有内容)。0-9为全数字

所以全局[^0-9]匹配所有不是的数字。

同样的模式在PCRE中也可用,所以这将工作:

$page_id = preg_replace('/[^0-9]/', '', $_GET['pid']);

PCRE有一些很好的快捷方式来表达事物。例如,[0-9]可以替换为'd (d代表数字)此外,'D(大写字母)是反向的,因此相当于[^0-9]

结果如下:

$page_id = preg_replace('/'D/', '', $_GET['pid']);