我有以下字符串:
$text = My example text [shortcode_name]content of shortcode[/shortcode_name] is cool.
以下模式:
$pattern= '/\[(\/?shortcode_name.*?(?=\]))\]/';
它给了我以下结果:
preg_replace($pattern,'',$text);
My example text content of shortcode is cool.
这就像删除短代码的魅力一样 我正在寻找的是删除短代码和其间的所有内容。 我正在寻找的结果是:
My example text is cool.
答案 0 :(得分:3)
你走了:
$pattern= '/\[(shortcode_name)\].*?\[\/\1\] ?/';
说明:
(...)
内捕获,以便稍后重复使用,见下文)(...)
之前匹配的内容,在此示例中为“shortcode_name”答案 1 :(得分:2)
这可能可以作为你的正则表达式:
/\[(\w+)\].*\[\/(\1)\]/
您找到任何名称的第一个方括号标记,并在其间查找内容,然后使用lookback查找结束方括号。我只用javascript测试它,但它应该工作。然后你应该使用另一个正则表达式替换一个空格的多个空格:)
答案 2 :(得分:0)
你刚接受我的解决方案时接受了另一个答案,没有问题:)但我仍然想发布我的答案,因为如果你有多个短代码可以更灵活:
<?php
$shortCodes = array("shortcode_name", "shortcode_name2", "shortcode_name3");
$text = <<< EOF
My example text [shortcode_name]content of shortcode[/shortcode_name] is cool.
another example text [shortcode_name2]content of shortcode[/shortcode_name2] is cool.
Yet another example [shortcode_name3]content of shortcode[/shortcode_name3] is cool.
EOF;
foreach($shortCodes as $shortCode){
$text = preg_replace("%\[$shortCode\].*?\[/$shortCode\]%i", '', $text);
$text = preg_replace('/\s{2,}/i', ' ', $text); //remove 2 or more spaces
}
echo $text;
<强>输出:强>
My example text is cool.
another example text is cool.
Yet another example is cool.
<强>演示:强> http://ideone.com/VhL5vm
答案 3 :(得分:-1)
试试我的版本,它也会照顾换行符。
$text = "My example text [shortcode_name]content of shortcode[/shortcode_name] is cool.";
$text = "My example text [shortcode_name]content of
shortcode[/shortcode_name] is cool.";
$pattern= '/\[(shortcode_name)\](.|\s)*?\[\/\1\]/';
echo preg_replace($pattern,'' ,$text);
<强>输出强>
我的示例文字很酷。