制作首字母大写字母

时间:2014-04-28 08:08:01

标签: php regex

我有这段代码片段,我想将第一个字母更改为大写字母。但我无法管理它是否有效。

preg_replace('/(<h3[^>]*>)(.*?)(<\/h3>)/i', '$1'.ucfirst('$2').'$3', $bsp)

5 个答案:

答案 0 :(得分:5)

使用正则表达式解析HTML总是很困难。为避免PHP和正则表达式,我建议使用CSS和text-transform属性。

h3 { text-transform: capitalize; }

答案 1 :(得分:3)

  

警告: HTML不是常规语言,无法使用正则表达式正确解析。请改用DOM parser

$bsp = '<h3>hello</h3>';

$dom = new DOMDocument;
$dom->loadXML($bsp);

foreach ($dom->getElementsByTagName('h3') as $h3) {
    $h3->nodeValue = ucfirst($h3->nodeValue);
}

echo $dom->saveHTML();

Demo


但如果您完全确定标记格式总是相同,那么可以使用正则表达式。但是,请使用preg_replace()而不是preg_replace_callback(),而不是Demo

$bsp = '<h3>hello</h3>';

echo preg_replace_callback('/(<h3[^>]*>)(.*?)(<\/h3>)/i', function ($m) {
    return $m[1].ucfirst($m[2]).$m[3];
}, $bsp);

{{3}}

答案 2 :(得分:0)

使用像这样的dom解析器可能是:

<?php
$html='<h3>hello world</h3>';
$dom = new DOMDocument;
$dom->loadHTML($html);
echo ucfirst($dom->getElementsByTagName('h3')->item(0)->nodeValue);

输出:

Hello world

答案 3 :(得分:0)

使用DOMXPath

<?php

$html = 'HTML String <h3>whatever</h3>';
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NODEFDTD); //Don't add a default doctype.
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//h3') as $h3) {
    $h3->nodeValue = ucfirst($h3->nodeValue);
}
echo $dom->saveHTML();

即使它们的格式不符合您的预期,也会捕获所有h3

答案 4 :(得分:-4)

首字母大写 - echo ucfirst($str)

制作首都中每个单词的第一个字母 - echo ucwords($str)