我不确定是否要使用此权限,因为它不完全是短代码。
我要实现的目标是创建一个在字符串中查找替换星号的函数。但我需要交替替换第一和第二。
$srting = 'Create personalised *tasty treats*';
我需要考虑它的多种用途,例如下面的字符串...
$srting = 'Create personalised *tasty treats* and branded *promotional products*';
第一个*
将替换为开头的<span class="d-inline-block">
第二个*
将替换为结束</span>
对于字符串中*
的任何更多使用,循环都会重复一次。
我不确定最有效的方法是什么,正则表达式可以做到这一点吗?任何想法都将非常感谢。
使用可接受的答案更新了以下工作功能。
public static function word_break_fix($string) {
$newString = preg_replace('/\\*([^*]*)\\*/s', '<span class="d-inline-block">\\1</span>', $string);
return $newString;
}
答案 0 :(得分:1)
只需使用preg_replace
捕获两个星号之间的所有内容即可。您可以使用反斜杠编号引用替换中的捕获组。
preg_replace('/\\*([^*]*)\\*/s', '<span class="d-inline-block">\\1</span>', $subject)
https://regex101.com/r/i7fm8X/1/
请注意,在PHP中,正则表达式是由字符串构建的,因此您只需对正则表达式转义一次字符,并且在使用字符串文字时会再次对反斜杠进行转义。
答案 1 :(得分:0)
是的,这绝对是正则表达式的理想选择!
对于标签替换,类似的方法很有效:
<?php
$string = 'Create personalised *tasty treats* and branded *promotional products* *tasty treats*';
$replace = preg_replace_callback("/(\\*[a-zA-Z\\s]*\\*)/m", function ($matches) {
switch($matches[0])
{
case "*tasty treats*":
return "Chocolate!";
case "*promotional products*":
return "DRINK COCA COLA!";
}
return $matches[0];
}, $string);
echo $replace;
这里是Regex101的链接,因此您可以查看和了解正则表达式的工作方式:https://regex101.com/r/pyCTZU/1
但是要按您指定的方式注入HTML,请尝试以下操作:
<?php
$string = 'Create personalised *tasty treats* and branded *promotional products* *tasty treats*';
$replace = preg_replace_callback("/(\\*[a-zA-Z\\s]*\\*)/m", function ($matches) {
return "<span class=\"d-inline-block\">".substr($matches[0], 1, strlen($matches[0]) - 2)."</span>";
}, $string);
echo $replace;