我试图创建一个正则表达式来选择标签之间的所有内容,而不是大胆的内容,如下所示:
[capti id="attachment_2231" align="alignnone" width="950" caption="ABC"]AEAEAEASEASEA[/caption] ***ABCDEFGHIJKLMN*** [capti id="attachment_2231" align="alignnone" width="950" caption="ABC"]AEAEAEASEASEA[/caption]
我尝试的正则表达式是\[([a-z]|[A-Z])* (.*)\[\/([a-z]|[A-Z])*\]
,但它会选择所有内容,包括粗体内容。
我能做些什么吗?
非常感谢。
答案 0 :(得分:0)
正则表达式可能不是最佳解决方案,但您需要使用延迟匹配来限制匹配的字符数量,因此.*
将成为.*?
。
此外,通过匹配所有字符直到结束标记来简化标签的选择:
\[[^\]]+\](.*?)\[\/[^\]]+\]
请参阅regex101上的example。
答案 1 :(得分:0)
我认为比使用正则表达式更好的选择是使用空字符串替换粗体文本,然后保留剩余内容。
$string = '[capti id="attachment_2231" align="alignnone" width="950" caption="ABC"]AEAEAEASEASEA[/caption] ***ABCDEFGHIJKLMN*** [capti id="attachment_2231" align="alignnone" width="950" caption="ABC"]AEAEAEASEASEA[/caption]';
$pattern = '/\*{3}\w+\*{3}/i';
echo preg_replace($pattern, "", $string);
// output
[capti id="attachment_2231" align="alignnone" width="950" caption="ABC"]AEAEAEASEASEA[/caption] [capti id="attachment_2231" align="alignnone" width="950" caption="ABC"]AEAEAEASEASEA[/caption]
但是如果你想要一个正则表达式,你可以使用这样的一个:
(\[.*?\].*?\[.*?\])
<强> Working demo 强>
MATCH 1
1. [0-95] `[capti id="attachment_2231" align="alignnone" width="950" caption="ABC"]AEAEAEASEASEA[/caption]`
MATCH 2
1. [117-212] `[capti id="attachment_2231" align="alignnone" width="950" caption="ABC"]AEAEAEASEASEA[/caption]`