【问题标题】:Php preg_replace, regex pattern doesn't matchphp preg_replace,正则表达式模式不匹配
【发布时间】:2015-03-02 21:17:26
【问题描述】:

我正在尝试开发一个基本的模板引擎,所以我不得不使用 preg_replace 这么多。我对以下主题有疑问:

$subject = "{%content%} %content%";
$pattern = '/matched_regex/';
$replace = 'OK';
echo preg_replace($pattern,$replace,$subject);

并且输出必须是这样的:

{%content%} OK

换句话说,它只会与%content%匹配

regex模式应该怎么做?

【问题讨论】:

  • 我试过这个 $pattern = '/[^{]%\s*(.*?)\s*%[^}]/';
  • 还有这个 $pattern = '/{{0}?%\s*(.*?)\s*%}{0}/';

标签: php regex preg-replace


【解决方案1】:

这将仅匹配未在 { 之后或位于主题字符串开头的 %content%%content% 之前的任何字符都将与替换字符串中的 \1 一起放回:

$subjects = [
    '{%content%} %content%',
    'Foo {%content%} bar %content% baz',
    'Foo{%content%}bar%content%baz',
    'Foo{%content%}bar%content%',
    '{%content%}%content%',
    '%content%{%content%}',
];

$replace = 'OK';
foreach ($subjects as $subject) {
    $pattern = '/(^|[^{])%content%/';
    echo preg_replace($pattern, '\1'.$replace, $subject), PHP_EOL;
}

输出:

{%content%} OK
Foo {%content%} bar OK baz
Foo{%content%}barOKbaz
Foo{%content%}barOK
{%content%}OK
OK{%content%}

【讨论】:

  • 太好了。非常感谢你! :)
猜你喜欢
  • 2011-05-20
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
相关资源
最近更新 更多