正则表达式:将标题文本更改为大写

时间:2017-02-22 11:24:01

标签: php regex

在我的网站中,我想使用德语字母ß,它只作为小写字母存在。虽然我希望我的所有标题都以大写字母(大写)显示,但我使用font-transform: uppercase。但是用大写的SS取代了ß字母,由于某些设计和编程功能,这是不需要的。

所以我在想preg_replace_callback,它会将我的HTML代码标题中的所有字母都改为大写字母。

$content = preg_replace_callback('/(<h\d>)(.*)(<\/h\d>)/', function($matches) {
    return $matches[1] . mb_strtoupper($matches[2], 'UTF-8') . $matches[3];
}, $content);

在没有特殊属性或嵌套链接等的标题上效果很好。因为我是正则表达式的新手,我不知道如何写这些。

基本上<h2 class="heading-italic"><a href="http://www.google.de">Google</a></h2>应该变为<h2 class="heading-italic"><a href="http://www.google.de">GOOGLE</a></h2>

我的正则表达式看起来如何,还会捕获带有属性和(多个)嵌套元素的标题?

1 个答案:

答案 0 :(得分:0)

/(<h\d>)(.*)(<\/h\d>)/更改为此:

 $newregex = '/(<h\d.*?>)(<a .*?>)?(.*)(<\/a>)?(<\/h\d>)/' ;

 $content = preg_replace_callback( $newregex , function($matches) {
     return $matches[1] . mb_strtoupper($matches[3], 'UTF-8') . $matches[5];
 }, $content);

注意mb_strtoupper($matches[3], 'UTF-8')[3]用于新的正则表达式和第3组。 group2和group4是可选的。