我有这段代码片段,我想将第一个字母更改为大写字母。但我无法管理它是否有效。
preg_replace('/(<h3[^>]*>)(.*?)(<\/h3>)/i', '$1'.ucfirst('$2').'$3', $bsp)
答案 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();
但如果您完全确定标记格式总是相同,那么可以使用正则表达式。但是,请使用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)