[英]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.