使用PHP Regex开始和结束

时间:2012-06-05 10:01:43

标签: php regex string

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

     $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. 结尾的字符串中的每个子字符串
  3. 我抓住每个子字符串,我想抓住<task></task>
  4. 中间的每个数据
  5. 在我抓住标记中间的每个数据中,我想用strlen来测量它们的长度
  6. 现在我想要替换以<task>开头并以</task>结尾的每个子字符串,其字符串的长度位于其中间。
  7. 输出必须像这样

      

    这4个是之前的9,但现在这是9,将变为8

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

1 个答案:

答案 0 :(得分:1)

好的,很简单:

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

正则表达式使用(.*?)启动一个内存模式,我后来将其用于传递strlen()

我使用.*?来表示非贪婪的匹配(否则它会匹配第一个<task>和最后一次出现的</task>之间的所有内容。

e修饰符用于评估preg_replace的第二个参数;这样就可以在表达式作为整体进行求值之前在表达式中编写'\\1'来返回字符串长度。

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