在php中将ereg_replace转换为preg_replace

时间:2013-05-04 21:15:44

标签: php preg-replace posix-ere

我有以下ereg_replace声明:

ereg_replace ( ".*alternative0=\"[^\"]*\"[ ]{0,10}>", "", $v );

由于ereg_replace已被弃用,我想将其升级为preg_replace,我还想升级我的代码,以便只替换第一次出现的代码。

preg_replace ("/.*alternative0=\".*?\".*>/", "", $v,1 );

但似乎部分工作。

主要问题是当我在">之间有空格时,我的preg无法正常工作

以下是我想要更改的一些示例字符串:

<tag type="head" alternative0="not head">{!head!}</tag>
<tag type="tail" alternative0="tail>{!not tail!}</tag>

但它也可能是:

<tag type="head" alternative0="not head">{!
xxxx   !}</tag>

甚至:

<tag type="header" alternative0="not head "    > {!  blah bla !}</tag>

1 个答案:

答案 0 :(得分:0)

您将拥有更高效的模式:

preg_replace ('/.*alternative0="[^"]++"[^>]*+>/', "", $v, 1);

你不能使用.*>之类的东西,因为点匹配所有字符而量词*是贪婪的,因此.*匹配最终的&gt;同样,模式中的>永远不会匹配或在良好的偏移处不匹配。