ページへ戻る
印刷
正規表現処理エンジン PCRE の パータン分析スイッチの有効性について
をテンプレートにして作成 ::
XOOPS マニア
UsersWiki
:nao-pon/blog/2013-06-27 をテンプレートにして作成
開始行:
#navi
RIGHT:&rsslink(../);
#boxdate
* 正規表現処理エンジン PCRE の パータン分析スイッチの有効...
RIGHT:&tag(PHP,PCRE,プログラミング,正規表現);
[[イメージマネージャーを使用するにすると更新できなくなり...
今まで、特に確信がない正規表現パターンでも、なんとなく効...
*** テストスクリプト
xpWiki レンダラーの BB-Code に対応する正規表現をすべて確...
#code(php){{
$str = <<<EOD
(BB-Code を含んだ適当な文章 4,500字程度)
EOD;
$regs = array();
$regs[] = '/(?:\r\n|\r|\n)?\[code](?:\r\n|\r|\n)?(.*)(?:\...
$regs[] = '/(?:\r\n|\r|\n)?\[code](?:\r\n|\r|\n)?(.*)(?:\...
$regs[] = '/\[email](.+?)\[\/email]/i';
$regs[] = '/\[email](.+?)\[\/email]/iS';
$regs[] = '/\[url=([\'"]?)((?:ht|f)tp[s]?:\/\/[!~*\'();\/...
$regs[] = '/\[url=([\'"]?)((?:ht|f)tp[s]?:\/\/[!~*\'();\/...
$regs[] = '/\[url=([\'"]?)([!~*\'();\/?:\@&=+\$,%#_0-9a-z...
$regs[] = '/\[url=([\'"]?)([!~*\'();\/?:\@&=+\$,%#_0-9a-z...
$regs[] = '/\[siteurl=([\'"]?)\/?([!~*\'();?:\@&=+\$,%#_0...
$regs[] = '/\[siteurl=([\'"]?)\/?([!~*\'();?:\@&=+\$,%#_0...
$regs[] = '/(\[quote[^\]]*])(?:\r\n|\r|\n)(?![<>*|,#: \t+...
$regs[] = '/(\[quote[^\]]*])(?:\r\n|\r|\n)(?![<>*|,#: \t+...
$regs[] = '/(?:\r\n|\r|\n)*\[\/quote\]/';
$regs[] = '/(?:\r\n|\r|\n)*\[\/quote\]/S';
$regs[] = '/\[img\s+align=([\'"]?)(left|center|right)\1(?...
$regs[] = '/\[img\s+align=([\'"]?)(left|center|right)\1(?...
$regs[] = '/\[img(?:\s+title=([\'"])?((?(1)[^]]*|[^\]\s]*...
$regs[] = '/\[img(?:\s+title=([\'"])?((?(1)[^]]*|[^\]\s]*...
$regs[] = '/\[img\s+align=([\'"]?)(left|center|right)\1(?...
$regs[] = '/\[img\s+align=([\'"]?)(left|center|right)\1(?...
$regs[] = '/\[img(?:\s+title=([\'"])?((?(1)[^]]*|[^\]\s]*...
$regs[] = '/\[img(?:\s+title=([\'"])?((?(1)[^]]*|[^\]\s]*...
$regs[] = '/\[siteimg\s+align=([\'"]?)(left|center|right)...
$regs[] = '/\[siteimg\s+align=([\'"]?)(left|center|right)...
$regs[] = '/\[siteimg(?:\s+title=([\'"])?((?(1)[^]]*|[^\]...
$regs[] = '/\[siteimg(?:\s+title=([\'"])?((?(1)[^]]*|[^\]...
$regs[] = '/\x01(?:\=([^\]]+))?\](?:\r\n|[\r\n])((?:(?>[^...
$regs[] = '/\x01(?:\=([^\]]+))?\](?:\r\n|[\r\n])((?:(?>[^...
$_reg = 'test|hoge|fuga';
$regs[] = '/\[\/?(?:' . $_reg . ')(?:(?: |=)[^\]]+)?\]/';
$regs[] = '/\[\/?(?:' . $_reg . ')(?:(?: |=)[^\]]+)?\]/S';
$regs[] = '/\[(' . $_reg . ')(?:\b[^\]]+)?].+\[\/\\1\]/sU';
$regs[] = '/\[(' . $_reg . ')(?:\b[^\]]+)?].+\[\/\\1\]/sU...
$n = 0;
foreach($regs as $reg) {
$n++;
set_time_limit(30);
$start = microtime(true);
for ($i=0; $i < 10000; $i++) {
preg_match($reg, $str);
}
echo $reg;
echo ' : '. (microtime(true) - $start) . '<br>';
if ($n%2 === 0) echo str_repeat('-', 80).'<br>';
}
}}
----
*** 実行結果
#pre{{
/(?:\r\n|\r|\n)?\[code](?:\r\n|\r|\n)?(.*)(?:\r\n|\r|\n)?...
/(?:\r\n|\r|\n)?\[code](?:\r\n|\r|\n)?(.*)(?:\r\n|\r|\n)?...
---------------------------------------------------------...
/\[email](.+?)\[\/email]/i : 0.24048900604248
/\[email](.+?)\[\/email]/iS : 0.24318504333496
---------------------------------------------------------...
/\[url=(['"]?)((?:ht|f)tp[s]?:\/\/[!~*'();\/?:\@&=+\$,%#_...
/\[url=(['"]?)((?:ht|f)tp[s]?:\/\/[!~*'();\/?:\@&=+\$,%#_...
---------------------------------------------------------...
/\[url=(['"]?)([!~*'();\/?:\@&=+\$,%#_0-9a-zA-Z.-]+)\1\](...
/\[url=(['"]?)([!~*'();\/?:\@&=+\$,%#_0-9a-zA-Z.-]+)\1\](...
---------------------------------------------------------...
/\[siteurl=(['"]?)\/?([!~*'();?:\@&=+\$,%#_0-9a-zA-Z.-][!...
/\[siteurl=(['"]?)\/?([!~*'();?:\@&=+\$,%#_0-9a-zA-Z.-][!...
---------------------------------------------------------...
/(\[quote[^\]]*])(?:\r\n|\r|\n)(?![<>*|,#: \t+-])/ : 0.34...
/(\[quote[^\]]*])(?:\r\n|\r|\n)(?![<>*|,#: \t+-])/S : 0.3...
---------------------------------------------------------...
/(?:\r\n|\r|\n)*\[\/quote\]/ : 3.4016590118408
/(?:\r\n|\r|\n)*\[\/quote\]/S : 0.36038398742676
---------------------------------------------------------...
/\[img\s+align=(['"]?)(left|center|right)\1(?:\s+title=([...
/\[img\s+align=(['"]?)(left|center|right)\1(?:\s+title=([...
---------------------------------------------------------...
/\[img(?:\s+title=(['"])?((?(1)[^]]*|[^\]\s]*))(?(1)\1))?...
/\[img(?:\s+title=(['"])?((?(1)[^]]*|[^\]\s]*))(?(1)\1))?...
---------------------------------------------------------...
/\[img\s+align=(['"]?)(left|center|right)\1(?:\s+title=([...
/\[img\s+align=(['"]?)(left|center|right)\1(?:\s+title=([...
---------------------------------------------------------...
/\[img(?:\s+title=(['"])?((?(1)[^]]*|[^\]\s]*))(?(1)\1))?...
/\[img(?:\s+title=(['"])?((?(1)[^]]*|[^\]\s]*))(?(1)\1))?...
---------------------------------------------------------...
/\[siteimg\s+align=(['"]?)(left|center|right)\1(?:\s+titl...
/\[siteimg\s+align=(['"]?)(left|center|right)\1(?:\s+titl...
---------------------------------------------------------...
/\[siteimg(?:\s+title=(['"])?((?(1)[^]]*|[^\]\s]*))(?(1)\...
/\[siteimg(?:\s+title=(['"])?((?(1)[^]]*|[^\]\s]*))(?(1)\...
---------------------------------------------------------...
/\x01(?:\=([^\]]+))?\](?:\r\n|[\r\n])((?:(?>[^\x01\x02]+)...
/\x01(?:\=([^\]]+))?\](?:\r\n|[\r\n])((?:(?>[^\x01\x02]+)...
---------------------------------------------------------...
/\[\/?(?:test|hoge|fuga)(?:(?: |=)[^\]]+)?\]/ : 0.4222390...
/\[\/?(?:test|hoge|fuga)(?:(?: |=)[^\]]+)?\]/S : 0.423197...
---------------------------------------------------------...
/\[(test|hoge|fuga)(?:\b[^\]]+)?].+\[\/\1\]/sU : 0.380738...
/\[(test|hoge|fuga)(?:\b[^\]]+)?].+\[\/\1\]/sUS : 0.38188...
---------------------------------------------------------...
}}
ほとんどのパターンでまるで効果がありませんでした。
やはり、PHP マニュアル ([[PHP: 正規表現パターンに使用可能...
>
:S|
あるパターンを複数回使用する場合は、マッチングにかかる時...
'''&font(150%,Blue){&br;最初の文字が単一ではなく、 かつ固...
この通りですね。 :shy:
RIGHT:&font(90%){&page_comments;};
#navi
終了行:
#navi
RIGHT:&rsslink(../);
#boxdate
* 正規表現処理エンジン PCRE の パータン分析スイッチの有効...
RIGHT:&tag(PHP,PCRE,プログラミング,正規表現);
[[イメージマネージャーを使用するにすると更新できなくなり...
今まで、特に確信がない正規表現パターンでも、なんとなく効...
*** テストスクリプト
xpWiki レンダラーの BB-Code に対応する正規表現をすべて確...
#code(php){{
$str = <<<EOD
(BB-Code を含んだ適当な文章 4,500字程度)
EOD;
$regs = array();
$regs[] = '/(?:\r\n|\r|\n)?\[code](?:\r\n|\r|\n)?(.*)(?:\...
$regs[] = '/(?:\r\n|\r|\n)?\[code](?:\r\n|\r|\n)?(.*)(?:\...
$regs[] = '/\[email](.+?)\[\/email]/i';
$regs[] = '/\[email](.+?)\[\/email]/iS';
$regs[] = '/\[url=([\'"]?)((?:ht|f)tp[s]?:\/\/[!~*\'();\/...
$regs[] = '/\[url=([\'"]?)((?:ht|f)tp[s]?:\/\/[!~*\'();\/...
$regs[] = '/\[url=([\'"]?)([!~*\'();\/?:\@&=+\$,%#_0-9a-z...
$regs[] = '/\[url=([\'"]?)([!~*\'();\/?:\@&=+\$,%#_0-9a-z...
$regs[] = '/\[siteurl=([\'"]?)\/?([!~*\'();?:\@&=+\$,%#_0...
$regs[] = '/\[siteurl=([\'"]?)\/?([!~*\'();?:\@&=+\$,%#_0...
$regs[] = '/(\[quote[^\]]*])(?:\r\n|\r|\n)(?![<>*|,#: \t+...
$regs[] = '/(\[quote[^\]]*])(?:\r\n|\r|\n)(?![<>*|,#: \t+...
$regs[] = '/(?:\r\n|\r|\n)*\[\/quote\]/';
$regs[] = '/(?:\r\n|\r|\n)*\[\/quote\]/S';
$regs[] = '/\[img\s+align=([\'"]?)(left|center|right)\1(?...
$regs[] = '/\[img\s+align=([\'"]?)(left|center|right)\1(?...
$regs[] = '/\[img(?:\s+title=([\'"])?((?(1)[^]]*|[^\]\s]*...
$regs[] = '/\[img(?:\s+title=([\'"])?((?(1)[^]]*|[^\]\s]*...
$regs[] = '/\[img\s+align=([\'"]?)(left|center|right)\1(?...
$regs[] = '/\[img\s+align=([\'"]?)(left|center|right)\1(?...
$regs[] = '/\[img(?:\s+title=([\'"])?((?(1)[^]]*|[^\]\s]*...
$regs[] = '/\[img(?:\s+title=([\'"])?((?(1)[^]]*|[^\]\s]*...
$regs[] = '/\[siteimg\s+align=([\'"]?)(left|center|right)...
$regs[] = '/\[siteimg\s+align=([\'"]?)(left|center|right)...
$regs[] = '/\[siteimg(?:\s+title=([\'"])?((?(1)[^]]*|[^\]...
$regs[] = '/\[siteimg(?:\s+title=([\'"])?((?(1)[^]]*|[^\]...
$regs[] = '/\x01(?:\=([^\]]+))?\](?:\r\n|[\r\n])((?:(?>[^...
$regs[] = '/\x01(?:\=([^\]]+))?\](?:\r\n|[\r\n])((?:(?>[^...
$_reg = 'test|hoge|fuga';
$regs[] = '/\[\/?(?:' . $_reg . ')(?:(?: |=)[^\]]+)?\]/';
$regs[] = '/\[\/?(?:' . $_reg . ')(?:(?: |=)[^\]]+)?\]/S';
$regs[] = '/\[(' . $_reg . ')(?:\b[^\]]+)?].+\[\/\\1\]/sU';
$regs[] = '/\[(' . $_reg . ')(?:\b[^\]]+)?].+\[\/\\1\]/sU...
$n = 0;
foreach($regs as $reg) {
$n++;
set_time_limit(30);
$start = microtime(true);
for ($i=0; $i < 10000; $i++) {
preg_match($reg, $str);
}
echo $reg;
echo ' : '. (microtime(true) - $start) . '<br>';
if ($n%2 === 0) echo str_repeat('-', 80).'<br>';
}
}}
----
*** 実行結果
#pre{{
/(?:\r\n|\r|\n)?\[code](?:\r\n|\r|\n)?(.*)(?:\r\n|\r|\n)?...
/(?:\r\n|\r|\n)?\[code](?:\r\n|\r|\n)?(.*)(?:\r\n|\r|\n)?...
---------------------------------------------------------...
/\[email](.+?)\[\/email]/i : 0.24048900604248
/\[email](.+?)\[\/email]/iS : 0.24318504333496
---------------------------------------------------------...
/\[url=(['"]?)((?:ht|f)tp[s]?:\/\/[!~*'();\/?:\@&=+\$,%#_...
/\[url=(['"]?)((?:ht|f)tp[s]?:\/\/[!~*'();\/?:\@&=+\$,%#_...
---------------------------------------------------------...
/\[url=(['"]?)([!~*'();\/?:\@&=+\$,%#_0-9a-zA-Z.-]+)\1\](...
/\[url=(['"]?)([!~*'();\/?:\@&=+\$,%#_0-9a-zA-Z.-]+)\1\](...
---------------------------------------------------------...
/\[siteurl=(['"]?)\/?([!~*'();?:\@&=+\$,%#_0-9a-zA-Z.-][!...
/\[siteurl=(['"]?)\/?([!~*'();?:\@&=+\$,%#_0-9a-zA-Z.-][!...
---------------------------------------------------------...
/(\[quote[^\]]*])(?:\r\n|\r|\n)(?![<>*|,#: \t+-])/ : 0.34...
/(\[quote[^\]]*])(?:\r\n|\r|\n)(?![<>*|,#: \t+-])/S : 0.3...
---------------------------------------------------------...
/(?:\r\n|\r|\n)*\[\/quote\]/ : 3.4016590118408
/(?:\r\n|\r|\n)*\[\/quote\]/S : 0.36038398742676
---------------------------------------------------------...
/\[img\s+align=(['"]?)(left|center|right)\1(?:\s+title=([...
/\[img\s+align=(['"]?)(left|center|right)\1(?:\s+title=([...
---------------------------------------------------------...
/\[img(?:\s+title=(['"])?((?(1)[^]]*|[^\]\s]*))(?(1)\1))?...
/\[img(?:\s+title=(['"])?((?(1)[^]]*|[^\]\s]*))(?(1)\1))?...
---------------------------------------------------------...
/\[img\s+align=(['"]?)(left|center|right)\1(?:\s+title=([...
/\[img\s+align=(['"]?)(left|center|right)\1(?:\s+title=([...
---------------------------------------------------------...
/\[img(?:\s+title=(['"])?((?(1)[^]]*|[^\]\s]*))(?(1)\1))?...
/\[img(?:\s+title=(['"])?((?(1)[^]]*|[^\]\s]*))(?(1)\1))?...
---------------------------------------------------------...
/\[siteimg\s+align=(['"]?)(left|center|right)\1(?:\s+titl...
/\[siteimg\s+align=(['"]?)(left|center|right)\1(?:\s+titl...
---------------------------------------------------------...
/\[siteimg(?:\s+title=(['"])?((?(1)[^]]*|[^\]\s]*))(?(1)\...
/\[siteimg(?:\s+title=(['"])?((?(1)[^]]*|[^\]\s]*))(?(1)\...
---------------------------------------------------------...
/\x01(?:\=([^\]]+))?\](?:\r\n|[\r\n])((?:(?>[^\x01\x02]+)...
/\x01(?:\=([^\]]+))?\](?:\r\n|[\r\n])((?:(?>[^\x01\x02]+)...
---------------------------------------------------------...
/\[\/?(?:test|hoge|fuga)(?:(?: |=)[^\]]+)?\]/ : 0.4222390...
/\[\/?(?:test|hoge|fuga)(?:(?: |=)[^\]]+)?\]/S : 0.423197...
---------------------------------------------------------...
/\[(test|hoge|fuga)(?:\b[^\]]+)?].+\[\/\1\]/sU : 0.380738...
/\[(test|hoge|fuga)(?:\b[^\]]+)?].+\[\/\1\]/sUS : 0.38188...
---------------------------------------------------------...
}}
ほとんどのパターンでまるで効果がありませんでした。
やはり、PHP マニュアル ([[PHP: 正規表現パターンに使用可能...
>
:S|
あるパターンを複数回使用する場合は、マッチングにかかる時...
'''&font(150%,Blue){&br;最初の文字が単一ではなく、 かつ固...
この通りですね。 :shy:
RIGHT:&font(90%){&page_comments;};
#navi
ページ名: