我有一个函数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代码会很好。
答案 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);