我有这样的代码,但PHP给了我一个Unknown modifier '?'
错误。
任何人都知道我做错了什么? (我发现在互联网上的代码,因为我不熟悉的正则表达式)
$old = "<FONT></FONT><P></P><TR></TR>";
$newString = preg_replace("/</?\w+/e/", "strtolower('\\0')", $old);
echo $newString ."<br/>";
我有这样的代码,但PHP给了我一个Unknown modifier '?'
错误。
任何人都知道我做错了什么? (我发现在互联网上的代码,因为我不熟悉的正则表达式)
$old = "<FONT></FONT><P></P><TR></TR>";
$newString = preg_replace("/</?\w+/e/", "strtolower('\\0')", $old);
echo $newString ."<br/>";
这个你要找的是什么?
对于后人:此代码将Munge时间属性的意见和<!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);
PHP 5.4和更早的版本:
$old = "<FONT></FONT><P id='P1'></P><TR></TR>";
$newString = preg_replace("/(<\/?\w+)(.*?>)/e", "strtolower('\\1') . '\\2'", $old);
echo $newString ."<br/>";
该e
修正已过时的PHP 5.5.0,请使用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/>";
输出:
<font></font><p id='P1'></p><tr></tr><br/>
替换正则表达式</?\w+>
与自身应用下壳体后
我不使用或推荐的正则表达式解析HTML,但这里也有一些失误:
/
符号作为分隔符,所以你需要逃避它在正则表达式或使用其他分隔符; /
结尾的那段不应该存在。 所以,你的代码也许应该是这个样子(使用另一个分隔符):
$newString = preg_replace("#</?\w+#e", "strtolower('\\0')", $old);
下面是处理属性名称以及标签的解决方案。 请注意,这还不是完全正确的; 它假定>绝不会在属性值中找到的字符诸如用于图像alt文本。 为了正确地做到这一点,使用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";