繁体   English   中英

PHP正则表达式,标记在字符串中多次出现

[英]PHP regex, tags occur multiple times in a string

我的目标是加粗标签{{}}之间的内容。 问题是,如果标签多次出现,将无法按我想要的方式工作。

$string1 = "hello my {{name}} is bo.";
$string2 = "hello my {{name}} is bo. Or {{not}}";
$startPoint = '{{';
$endPoint = '}}';
$result = preg_replace('/('.preg_quote($startPoint).')(.*)('.preg_quote($endPoint).')/si', '<b>$2</b>', $string);

结果为string1 :(应如此)

你好,我波。

结果与string2 :(不是我想要的)

你好,我的名字}}是bo。 或不

我觉得我缺少一些愚蠢的东西,只是不确定什么。 所有帮助将不胜感激。

编辑:谢谢! (。*?)很有魅力,如果您写答案,我会将其标记为已解决。 谢谢!

你为什么不试试这个?

$pattern = "~{{([^}{]*)}}~";
$replacement = "<b>$1</b>";
echo preg_replace($pattern, $replacement, $string);

.*会进行贪婪的匹配。 那就是它吃掉了第一个{{和最后一个}}大括号之间的所有内容。 要进行最短的匹配,您需要添加一个量词? 就在* 由于模式中存在捕获组,因此所有匹配的字符都存储在第一组中,即(.*) 这就是为什么您获得字符串name}} is bo. Or {{not name}} is bo. Or {{not第1组。

模式说明:

  • {{匹配两个大括号。
  • ([^}{]*)匹配并捕获零个或多个字符,但不捕获}{

  • }}匹配两个闭花括号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM