【问题标题】:convert ereg_replace to preg_replace in php [duplicate]在php中将ereg_replace转换为preg_replace [重复]
【发布时间】:2013-05-04 21:15:44
【问题描述】:

我有以下 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>

【问题讨论】:

  • 提示:首先转换。确保它像以前一样工作。然后询问关于匹配计数的(新)正则表达式问题的第二个问题。
  • 也许提供一些示例字符串,您希望与您的模式匹配,因为您正在将模式的行为从"[^\"]*"[ ]{0,10} 转换并稍微更改为".*?".*
  • 也许有人可以向我解释什么是 preg 相当于 "[ ]{0,10}" 因为这似乎是我模式中的唯一问题。我编辑了帖子并添加了一些示例

标签: php preg-replace posix-ere


【解决方案1】:

你将有一个更有效的模式:

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

你不能使用类似的东西:.*&gt; 因为点匹配所有字符并且量词 * 是贪婪的,因此 .* 也匹配最后一个 > 并且来自模式的 &gt; 永远不会匹配或不匹配在良好的偏移量。

【讨论】:

  • 谢谢卡西米尔,您的模式似乎无法正常工作,因为它忽略了空格
  • 卡西米尔,非常感谢,我做了一些似乎可行的修改 '/.*alternative0="[^"]*+"[^>]*+>/'
  • @sd1sd1:对不起,我没有看到你之前的评论!实际上,该模式与 void 属性不匹配。
猜你喜欢
  • 1970-01-01
  • 2013-05-26
  • 2013-02-10
  • 2013-07-17
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2011-09-10
相关资源
最近更新 更多