【问题标题】:Regex works in 'RegExr' but not with preg_replace?正则表达式适用于“RegExr”但不适用于 preg_replace?
【发布时间】:2014-12-01 17:15:03
【问题描述】:

我是正则表达式的新手,我使用 RegExr 检查了以下模式,但它在 PHP 中使用 preg_replace 失败。

我尝试添加一个额外的反斜杠来逃避第一个 \ 没有运气。

任何帮助我指出正确的方向将不胜感激。

例子:

   $output = preg_replace("\[if](.*)[/if/]*", ' ', $output);

我也尝试过添加斜线:

    $output = preg_replace("/\[if](.*)[/if/]*/", ' ', $output);

我要修改的字符串是:

[if] <p>A statement goes here</p> [/if]

【问题讨论】:

  • 您是否也尝试过启用一些error_reporting(~0)
  • PHP Regex for matching a UNC path 的可能重复项 - 对于用 PHP 字符串编写的正则表达式中的斜杠会发生什么,这可能是有见地的。这些在线工具中的大多数不提供 PHP 字符串,而只是提供正则表达式。您需要为 PHP 编码,然后在一个额外的步骤中。
  • 请使用您尝试修改的字符串示例编辑问题。我不确定这些方括号是正则表达式逻辑的一部分还是您要匹配的部分。
  • @p.g.l.hall -- 谢谢你的评论。添加了字符串。

标签: php regex


【解决方案1】:
  1. 如果您想让 [] 表示文字,请转义所有 ['s
  2. 需要分隔符。
  3. 如果分隔符出现在模式中,则必须转义,或者选择另一个分隔符(我选择 % 是因为 /)。
  4. 结尾]*,0次或多次]....你确定吗?
  5. 我怀疑更可能需要使用不贪婪的 (.*?),但我把这留给你。

给予:

"%\[if\](.*)\[/if\]%"

【讨论】:

  • 谢谢。这是有道理的——欣赏解释。我替换了它并且没有错误 - 但字符串没有被替换?我已将字符串添加到问题中。
  • 原因是您需要从正则表达式中删除最后一个 / 。它试图在那里替换 [if]whatever[/if/]。另外,最后一个 * 也可以。
  • 现在完美运行。 $output = preg_replace("%\[if\](.*?)\[/if\]%", '', $output);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多