2017-02-22 20 views
0

На моем сайте я хочу использовать немецкую букву ß, которая существует только в виде строчной буквы. Хотя я хочу, чтобы все заголовки отображались заглавными буквами (заглавные буквы), я использую font-transform: uppercase. Но это заменяет букву ß буквой верхнего регистра, которая не нужна из-за определенных функций проектирования и программирования.Regex: Изменить заголовки Тексты в верхнем регистре

Так что я думал о 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>

Как бы мое регулярное выражение взгляда, что также отлова заголовков с атрибутами, а также (несколько) вложенные элементы?

+0

Я хотел бы порекомендовать две вещи: 1) Придерживайтесь двойной буквы S для заглавных букв ß, так как это общепринято как «правильное». Причина в том, что CSS делает это так. Это похоже на микширование минус/тире (-/-), апостроф/акцент, [plenken] (https://en.wikipedia.org/wiki/Plenken) и т. Д.: Пользователь понимает это, но это неправильно. 2) [Не разбирайте HTML с регулярным выражением] (http://stackoverflow.com/a/1732454/3890673) :-) – crusy

ответ

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 являются необязательными.