使用 preg_replace() 将简码内容移动到属性中
Moving shortcode content into attribute using preg_replace()
我正在使用以下内容替换短代码的名称:
$content = '[title type="1"]Test[/title]';
$pattern = '#\[title(.*)(.*?)\[/title\]#i';
$replace = '[new_title[/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"]
使用 /\[(\w+)([^\]]+)](\w+).*/
作为 preg_replace()
中的模式。在模式 ([^\]]+)
select 中,除 ]
.
之外的每个字符
$newContent = preg_replace("/\[(\w+)([^\]]+)](\w+).*/", '[new_title title=""]', $content)
检查结果 demo
您可以使用
$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 title=""]';
echo preg_replace($pattern, $replace, $content);
参见 this PHP demo and this regex demo。如果您不想匹配其中包含换行符的标题,请删除使 [=12=] 匹配换行符的 s
修饰符。
图案详情
\[title
- [title
子串
(\s.*?)?
- 匹配 1 次或 0 次出现的可选捕获组
\s
- 任何空格
.*?
- 任何 0+ 个字符,尽可能少
]
- 一个 ]
字符
(.*?)
- 捕获第 2 组:任何 0+ 个字符,尽可能少
\[/title]
- [/title]
子串。
我正在使用以下内容替换短代码的名称:
$content = '[title type="1"]Test[/title]';
$pattern = '#\[title(.*)(.*?)\[/title\]#i';
$replace = '[new_title[/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"]
使用 /\[(\w+)([^\]]+)](\w+).*/
作为 preg_replace()
中的模式。在模式 ([^\]]+)
select 中,除 ]
.
$newContent = preg_replace("/\[(\w+)([^\]]+)](\w+).*/", '[new_title title=""]', $content)
检查结果 demo
您可以使用
$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 title=""]';
echo preg_replace($pattern, $replace, $content);
参见 this PHP demo and this regex demo。如果您不想匹配其中包含换行符的标题,请删除使 [=12=] 匹配换行符的 s
修饰符。
图案详情
\[title
-[title
子串(\s.*?)?
- 匹配 1 次或 0 次出现的可选捕获组\s
- 任何空格.*?
- 任何 0+ 个字符,尽可能少
]
- 一个]
字符(.*?)
- 捕获第 2 组:任何 0+ 个字符,尽可能少\[/title]
-[/title]
子串。