PHP preg_replace:如何在标签之间替换文本?

时间:2016-05-23 08:14:24

标签: php preg-replace

我有一个函数doit(),它以这样的方式转换文本:

I like berries -> I LikE BerrieS.

我需要它来处理html-text。 如何仅在html标签之间转换文本?请勿触摸标记名称和所有标记属性。例如。我需要:

<p class="super green" style="height: auto">I LikE BerrieS</p>

但不是:

<P ClasS="SupeR GreeN" StylE="HeighT: AutO">I LikE BerrieS</P>

我尝试过简单的preg_replace()模式,但没有任何效果。我是regexp的新手,需要帮助。

可能是preg_match()会更好吗? 有什么建议?提供有效的php代码会很好。

1 个答案:

答案 0 :(得分:1)

$text = '<div>some other text</div> 
<p class="super green" style="height: auto">i like berries</p>';

//this preg is searching for tags and text inside it
//and then change all first words to upper
$text = preg_replace_callback('#(<.*?>)(.*?)(</.*?>)#', function($matches){

  //this preg is searching for last letters in words and changing it to upper
  $t = preg_replace_callback('#([^ ])( |$)#', function($matches2){
    return strtoupper($matches2[1]) . $matches2[2];
  }, ucwords($matches[2]));
  return $matches[1] . $t . $matches[3];
}, $text);

var_dump($text);