首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP在preg_replace上崩溃

PHP在preg_replace上崩溃
EN

Stack Overflow用户
提问于 2013-03-25 13:24:54
回答 5查看 2.3K关注 0票数 20

我使用php.exe运行了以下脚本

preg_replace('#(?:^[^\pL]*)|(?:[^\pL]*$)#u','',$string);

或其等价物:

preg_replace('#(?:^[^\pL]*|[^\pL]*$)#u','',$string);

如果是$string="S"$string=" ذذ ",它就可以工作;如果是string='ذ',它就会生成不正确的;如果string='ذذ' PHP崩溃了,它就会崩溃。

但它适用于4.4.0 - 4.4.9,5.0.5 - 5.1.6版本。

出什么问题了?

请参阅http://3v4l.org/T3rpV

<?php
$string='دد';
echo preg_replace('#(?:^[^\pL]*)|(?:[^\pL]*$)#u','',$string);

5.4.0 - 5.5.0alpha6的

输出

进程已退出,代码为139。

5.2.0 - 5.3.22,5.5.0beta1 4.4.0 - 4.4.9,5.0.5 - 5.1.6输出

دد

4.3.11、5.0.0 - 5.0.4的输出

警告: preg_replace():编译失败: PCRE不支持第3行/ in /T3rpV中偏移量为7的\L、\l、\N、\P、\p、\U、\u或\X

4.3.0 - 4.3.10的输出

警告:编译失败: PCRE不支持第3行上/ in /T3rpV中偏移量为7的\L、\l、\N、\P、\p、\U、\u或\X

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-03-28 19:08:42

最后,bug被解决了:

4.4.0 - 4.4.9、5.0.5 - 5.1.6、5.5.27 - 5.5.33、5.6.11 - 7.0.4、hhvm-3.6.1 - 3.12.0دد的

输出

票数 0
EN

Stack Overflow用户

发布于 2013-03-25 13:32:17

您可以使用替代的mb_ereg_replace()函数:

mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");
echo mb_ereg_replace('#(?:^[^\pL]*)|(?:[^\pL]*$)#u','',$string);
票数 5
EN

Stack Overflow用户

发布于 2013-03-29 22:08:23

也许这会有所帮助:

这些属性通常仅在使用"--enable-unicode- properties“编译PCRE时才可用

http://docs.php.net/manual/en/regexp.reference.unicode.php#96479

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15608203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档