【问题标题】:Where to add the delimiters - PHP在哪里添加分隔符 - PHP
【发布时间】:2017-11-27 22:36:59
【问题描述】:

我已经为此工作了一段时间。当我研究 PHP 警告时,我相信以下 PHP 代码需要在后半部分使用分隔符才能使其正常工作。

这里是代码,

$pee = preg_replace('!<p><!--(.*?)--></p>!ise', " '<!--' .  stripslashes(clean_pre('$1'))  . '-->' ", $pee);

这是我得到的警告,

警告:preg_replace():未知修饰符'-'

我发现当我将代码的后半部分放在一个新行时,这就是警告所指的地方,所以它的后半部分需要修复语法。

似乎破折号被视为修饰符,因此使用分隔符显然可以纠正这一点。我尝试添加分隔符,但每个都失败并且警告没有解决。

我是 PHP 新手,非常感谢您的帮助。

谢谢

【问题讨论】:

  • 你有分隔符 (!) 你需要转义
  • e 修饰符也被弃用/删除,具体取决于您的 PHP 版本。你应该使用preg_replace_callback。 (“此功能在 PHP 5.5.0 中已弃用,并在 PHP 7.0.0 中删除。”)-php.net/manual/en/reference.pcre.pattern.modifiers.php
  • 要添加到@iainn 的答案,第二个参数周围的那些双引号不应该在那里。您可以判断,因为语法突出显示将stripslashes() 视为字符串的一部分。
  • @rickdenhaan 实际上,在使用 e 修饰符时这是有效的,尽管如前所述,这是不推荐使用(或完全删除)的行为。
  • @iainn 我们生活和学习 ;-) 我从来不知道。

标签: php regex delimiter


【解决方案1】:

如果您使用! 包围您的正则表达式,那么您还需要转义该模式中的字符:

!<p><!--(.*?)--></p>!ise
     ^ This needs escaping.

你应该可以使用这个:

$pee = preg_replace('!<p><\!--(.*?)--></p>!ise', " '<!--' .  stripslashes(clean_pre('$1'))  . '-->' ", $pee);

(或者只是选择不同的分隔符(/ 等)。

您收到该错误的原因是 -! 之后的第一个字符,因此 PHP 假设您将它作为第一个修饰符提供。

编辑:正如@chris85 提到的,e 修饰符不再是好的做法,请参阅此问题以获取有关更新代码的一些建议:Replace preg_replace() e modifier with preg_replace_callback

【讨论】:

  • 谢谢,这确实解决了警告,并且您在 e 修饰符上的正确性也已被弃用。警告从我必须的更改为已弃用的警告,改为使用“preg_replace_callback”。要使用“preg_replace_callback”需要 2 个参数,这些参数在该语法中是缺失的。有什么好的链接可以学习如何使用您知道的“preg_replace_callback”(PHP 手册除外)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 2016-07-19
  • 1970-01-01
  • 2019-03-16
  • 2021-05-21
  • 1970-01-01
  • 2015-12-08
相关资源
最近更新 更多