创建简短代码以使用php将html开头和结尾标签添加到字符串的方法

时间:2019-02-24 16:20:27

标签: php

我不确定是否要使用此权限,因为它不完全是短代码。

我要实现的目标是创建一个在字符串中查找替换星号的函数。但我需要交替替换第一和第二。

$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;

}

2 个答案:

答案 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;