好的我有以下代码将大字符串的某些部分替换为
$string = 'this <task>post</task> was a <post>post item</post>
before but now this is now a <task>task item</task>
and will become like <task>this one</task>';
$pattern = '^<task>*</task>$';
$datainmiddle = preg_replace($pattern, $replacement, $string);
$replacement = strlen(datainmid);
//I have no idea what to do next...(ノД`)・゜・。
现在我想做的事情是以下
<task>
开头并以</task>
<task>
和</task>
<task>
开头并以</task>
结尾的每个子字符串,其字符串的长度位于其中间。输出必须像这样
这4个是之前的9,但现在这是9,将变为8
如果你发现它令人困惑。请告诉我
答案 0 :(得分:1)
好的,很简单:
preg_replace('#<task>(.*?)</task>#e', "strlen('\\1')", $str);
正则表达式使用(.*?)
启动一个内存模式,我后来将其用于传递strlen()
。
我使用.*?
来表示非贪婪的匹配(否则它会匹配第一个<task>
和最后一次出现的</task>
之间的所有内容。
e
修饰符用于评估preg_replace
的第二个参数;这样就可以在表达式作为整体进行求值之前在表达式中编写'\\1'
来返回字符串长度。
希望解释有助于理解解决方案。