我正在使用以下内容替换简码的名称:
$content = '[title type="1"]Test[/title]';
$pattern = '#\[title(.*)(.*?)\[/title\]#i';
$replace = '[new_title$1[/new_title]';
echo preg_replace($pattern, $replace, $content);
这可以很好地改变它:
[title type="1"]Test[/title]
对此:
[new_title type="1"]Test[/new_title]
但是我试图将标签之间的文本移动到一个属性中,并使其像这样自动闭合:
[new_title type="1" title="Test"]
答案 0 :(得分:2)
您可以使用
$content = "[title type=\"1\"]Test[/title] [title]Test2[/title]\n [title type=\"6\"]Test With\nNewline 3[/title]";
$pattern = '#\[title(\s.*?)?](.*?)\[/title]#is';
$replace = '[new_title$1 title="$2"]';
echo preg_replace($pattern, $replace, $content);
请参见this PHP demo和this regex demo。如果您不想匹配标题中包含换行符的标题,请删除使s
匹配换行符的.
修饰符。
模式详细信息
\[title
-一个[title
子字符串(\s.*?)?
-匹配1个或0个匹配项的可选捕获组
\s
-任意空格.*?
-任意0个以上的字符,尽可能少]
-一个]
字符(.*?)
-捕获第2组:任意0个以上的字符,并且数量尽可能少\[/title]
-[/title]
子字符串。答案 1 :(得分:0)
使用/\[(\w+)([^\]]+)](\w+).*/
作为preg_replace()
中的模式。在模式([^\]]+)
中,选择除]
以外的所有字符。
$newContent = preg_replace("/\[(\w+)([^\]]+)](\w+).*/", '[new_title$2 title="$3"]', $content)
在demo中查看结果