1

好的,我有以下代码用于将大字符串的某些部分替换为某些内容

     $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...(ノД`)・゜・。

现在我想做的事情如下

  1. 我想获取以开头<task>和结尾的字符串中的每个子字符串</task>
  2. 对于我抓取的每个子字符串,我想抓取<task>and中间的每个数据</task>
  3. 在我在标记中间抓取的每个数据中,我想使用 strlen 测量它们的长度
  4. 现在我想用它们中间的字符串长度替换每个以字符串开头<task>和结尾的子字符串。</task>

输出必须是这样的

这 4 以前是 9,但现在这是 9,会变成 8

如果你发现它令人困惑。请告诉我

4

1 回答 1

1

好的,很简单:

preg_replace('#<task>(.*?)</task>#e', "strlen('\\1')", $str);

正则表达式用于(.*?)启动一个内存模式,我稍后会使用它传递到strlen().

.*?用来表示非贪婪匹配(否则它匹配第一次<task>和最后一次出现</task>.

e修饰符用于将第二个参数评估为preg_replace; 这使得可以'\\1'在表达式作为一个整体进行评估之前写入表达式以返回字符串长度。

希望解释有助于理解解决方案。

于 2012-06-05T10:04:46.540 回答