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);

regex を使用(.*?)してメモリ パターンを開始し、後でこれを に渡しstrlen()ます。

私は.*?貪欲ではない一致を示すために使用しています (それ以外の場合<task>は、</task>.

e修飾子は、2 番目のパラメーターを評価するために使用されますpreg_replace。これにより'\\1'、文字列の長さを返すために全体として評価される前に式を書き込むことができます。

説明が解決策を理解するのに少し役立つことを願っています。

于 2012-06-05T10:04:46.540 に答える