正则表达式将以哈希括住的## WORD = 123 ##替换为方括号[object word = 123]

时间:2018-07-13 16:01:13

标签: php regex

我想用方括号替换主题标签,并在第一个方括号后添加一个单词,所有字符串都必须小写。

示例字符串:

$str = "This is some text  
<p>##IDOBJECT=784##</p> and another some text 
<p>##IDOBJECT=1509##</p>
<p>##LATESTARTICLESHOME=321##</p>
<p align=\"center\">##IDOBJECT=321##</p>";

我想将##IDOBJECT=123##格式的字符串替换为[object idobject=123]。请注意,这里在第一个object括号之后添加了额外的[字,并将IDOBJECT字符串转换为idobject。 我尝试使用此/(\##.*?\##)/正则表达式来查找那些字符串,但无法按照我的描述进行替换。

1 个答案:

答案 0 :(得分:4)

您的正则表达式是正确的,您只需要调整捕获位置即可。在# s中移动组。另外,#并不特殊,因此不需要转义。

##(.*?)##

演示:https://regex101.com/r/meYYna/1/

...或者如果您想降低收益,还可能误读了preg_replace_callbackstrtolower

$str = "This is some text  
<p>##IDOBJECT=784##</p> and another some text 
<p>##IDOBJECT=1509##</p>
<p>##LATESTARTICLESHOME=321##</p>
<p align=\"center\">##IDOBJECT=321##</p>";
echo preg_replace_callback('/##(.*?)##/', function($match){
    return strtolower('[object ' . $match[1] . ']');
}, $str);

https://3v4l.org/ijZiO