【问题标题】:php regex preg_replace_callback fails to handle mutliple linesphp regex preg_replace_callback 无法处理多行
【发布时间】:2014-03-15 16:02:51
【问题描述】:

我有一个类似的代码

 $newstr = preg_replace_callback("/<p>(.+?)</p>/", function($matches) 
 {
    return str_replace($matches[1], '<b>' . $matches[1] . '</b>', $matches[0]);
 }, $str);

如果像这样给出单行字符串,它会替换

 '<p>Hello World and Hello Universe</p>'

但是当给出多行时失败

  '<p>Hello World and
         Hello Universe</p>'

如何处理?如果出于测试目的我给出这样的字符串

  '<p>Hello World and'.
         'Hello Universe</p>'

它可以工作,但问题是这个字符串来自文本区域并且无法理解该怎么做?

【问题讨论】:

  • 使用 s 修饰符允许多行语句
  • 谢谢@Tularis Amal 的建议。
  • 我知道,和 amal 同时发布的

标签: php regex preg-replace-callback


【解决方案1】:

使用s modifier(也称为DOTALL 修饰符)。默认情况下,点元字符匹配除换行符之外的所有内容。 s 修饰符使其也匹配换行符:

$newstr = preg_replace_callback("~<p>(.+?)</p>~s", function($matches) {
    return str_replace($matches[1], '<b>' . $matches[1] . '</b>', $matches[0]);
}, $str);

Demo

【讨论】:

  • 感谢 Amal 成功了。我在 Regex 上真的很弱,Mika 建议它是一个很棒的。
  • @JohnSmith:很高兴我能帮上忙。我建议通过regular-expressions.info - 这是学习正则表达式的好资源:)
  • 感谢您提供的链接,我将看到该链接,并将在 SO 要求的 10 分钟后接受答复
猜你喜欢
  • 1970-01-01
  • 2020-02-23
  • 2020-11-17
  • 1970-01-01
  • 2022-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多