0

このコードがありますが、PHP でUnknown modifier '?'エラーが発生します。

誰が私が間違ったことを知っていますか? (正規表現に慣れていないため、インターネットでコードを見つけました)

$old = "<FONT></FONT><P></P><TR></TR>";
$newString = preg_replace("/</?\w+/e/", "strtolower('\\0')", $old);
echo $newString ."<br/>";
4

5 に答える 5

5

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/>
于 2012-09-01T17:20:07.380 に答える
0

htmlを解析するために正規表現を使用または推奨していませんが、ここにいくつかの間違いがあります。

  1. シンボルを区切り文字として使用している/ため、正規表現でエスケープするか、別の区切り文字を使用する必要があります。
  2. /最後に、そこにあるべきではない余分なものがあります。

したがって、コードはおそらく(別の区切り文字を使用して)次のようになります。

$newString = preg_replace("#</?\w+#e", "strtolower('\\0')", $old);
于 2012-09-01T17:27:04.447 に答える
0

</?\w+>小文字を適用した後、正規表現をそれ自体に置き換えます

于 2012-09-01T17:20:47.650 に答える
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);
于 2012-09-01T17:25:25.523 に答える