我有这段代码,但PHP给了我一个Unknown modifier '?'
错误。
任何人都知道我做错了什么? (我在互联网上找到了代码,因为我不熟悉正则表达式)
$old = "<FONT></FONT><P></P><TR></TR>";
$newString = preg_replace("/</?\w+/e/", "strtolower('\\0')", $old);
echo $newString ."<br/>";
答案 0 :(得分:4)
PHP 5.4 及更早版本:
$old = "<FONT></FONT><P id='P1'></P><TR></TR>";
$newString = preg_replace("/(<\/?\w+)(.*?>)/e", "strtolower('\\1') . '\\2'", $old);
echo $newString ."<br/>";
自{em> 5.5.0 以来e
修饰符已弃用,请改用<{1}}:
preg_replace_callback
输出:
$old = "<FONT></FONT><P id='P1'></P><TR></TR>";
$newString = preg_replace_callback("/(<\/?\w+)(.*?>)/", function ($m) {
return strtolower($m[1]) . $m[2]; }, $old);
echo $newString ."<br/>";
答案 1 :(得分:0)
在应用小写
后用自己替换正则表达式</?\w+>
答案 2 :(得分:0)
这就是你要找的东西?
对于后代:此代码将使用属性注释和<!CDATA[[]]!>
<?php
function lowerTags($matches) {
return strtolower($matches[1]);
}
$old = "<!--BLAH--><FONT COLOR='BLACK'>extra textCAPITALIZED</FONT><P></P><TR></TR>";
echo preg_replace_callback("/(<\/?[^!][^>]+)/", 'lowerTags', $old);
答案 3 :(得分:0)
我不使用或推荐正则表达式来解析html,但这里有一些错误:
/
符号作为分隔符,因此您需要在正则表达式中将其转义或使用其他分隔符; /
。所以你的代码应该看起来像(使用另一个分隔符):
$newString = preg_replace("#</?\w+#e", "strtolower('\\0')", $old);
答案 4 :(得分:0)
这是一个处理属性名称和标签的解决方案。注意这仍然不完全正确;它假设字符&gt;永远不会在属性值中找到,例如图像的替代文字。要正确执行此操作,请使用DOMDocument类(但请注意,解析器在输入无效时会出现问题)。
<?php
function lowercase_tag_name_callback(array $m) {
return strtolower($m[1]) . lowercase_attribute_name($m[2]);
}
function lowercase_attribute_name_callback(array $m) {
return ' ' . strtolower($m[1]) . $m[2];
}
// change each attribute name to lowercase
function lowercase_attribute_name($input) {
$output = $input;
$output = preg_replace_callback('# ([a-zA-Z]+)(="[^"]+")#', 'lowercase_attribute_name_callback', $output);
$output = preg_replace_callback("# ([a-zA-Z]+)(='[^']+')#", 'lowercase_attribute_name_callback', $output);
$output = preg_replace_callback('# ([a-zA-Z]+)(=[^"\']+[ >])#', 'lowercase_attribute_name_callback', $output);
return $output;
}
$input = <<<'EOD'
<FONT></FONT><P id="P1"></P><TR></TR><IMG SRC="FourFive.jpg" ID='AnIDHere' ALT="FOUR five" CLASS=FourFive><!-- A Comment Here --><![CDATA[ CDATA Text Here ]]>
EOD;
$output = preg_replace_callback("#(</?\w+)(.*?>)#", 'lowercase_tag_name_callback', $input);
print "BEFORE: $input";
print " AFTER: $output";