正規表現についてお願い
機種依存文字を普通の文字に変換したいんですが、なんでどうしても一部しか変換できませんか、チェックして貰えませんか。お願いいたします
環境があれば、ちょっと実行して、すぐ結果を見えます。
ちらみに、開発環境は
php4.3
centos 4
apache ?(知らない)
<?php
define('REGEXP_CONTROL', '[\x00-\x08\x0B\x0C\x0E-\x1F]');
define('REGEXP_ENV_DEPEND_RANGE_FAST','[(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)(14)(15)(16)(17)(18)(19)(20)IIIIIIIVVVIVIIVIIIIXXミリキロセンチメートルグラムトンアールヘクタールリットルワットカロリードルセントパーセントミリバールページmmcmkmmgkgccm2平成””No.KKTel(上)(中)(下)(左)(右)(株)(有)(代)明治大正昭和∫ΣLΔ]');
define('REGEXP_ASCII', '[\x00-\x7F]');
define('REGEXP_TWO_BYTES','[\x8E\xA1-\xFE][\xA1-\xFE]');
define('REGEXP_THREE_BYTES', '\x8F[\xA1-\xFE][\xA1-\xFE]');
define('REGEXP_NORMAL_CHARACTERS', '(?:' . REGEXP_ASCII . '|' . REGEXP_TWO_BYTES . '|' . REGEXP_THREE_BYTES . ')*');
define('REGEXP_ENV_DEPEND_RANGE_STRICT', '^' . REGEXP_NORMAL_CHARACTERS . '?(?:' . REGEXP_ENV_DEPEND_RANGE_FAST . ')');
$envDependCharacterPatterns = array('(1)','(2)','(3)','(4)','(5)','(6)','(7)','(8)','(9)','(10)','(11)','(12)','(13)','(14)','(15)','(16)','(17)','(18)','(19)','(20)','I','II','III','IV','V','VI','VII','VIII','IX','X','ミリ','キロ','センチ','メートル','グラム','トン','アール','ヘクタール','リットル','ワット','カロリー','ドル','セント','パーセント','ミリバール','ページ','mm','cm','km','mg','kg','cc','m2','平成','”','”','No.','KK','Tel','(上)','(中)','(下)','(左)','(右)','(株)','(有)','(代)','明治','大正','昭和','∫','Σ','L','Δ');
// 機種依存文字を変換するための文字
$envDependCharacterReplacements = array(
'(1)','(2)','(3)','(4)','(5)','(6)','(7)','(8)','(9)','(10)','(11)','(12)','(13)','(14)','(15)','(16)','(17)','(18)','(19)','(20)',
'I','II','III','IV','V','VI',"VII","VIII","IX","X",
"ミリ","キロ","センチ","メートル","グラム","トン","アール","ヘクタール","リットル","ワット","カロリー","ドル","セント","パーセント","ミリバール","ページ",
"mm","cm","km","mg","kg","cc","m2",
"平成","”","”","No.","KK","Tel","(上)","(中)","(下)","(左)","(右)","(株)","(有)","(代)","明治","大正","昭和","∫","Σ","L","Δ"
);
// 入力する機種依存文字
$s = '(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)(14)(15)(16)(17)(18)(19)(20)IIIIIIIVVVIVIIVIIIIXXミリキロセンチメートルグラムトンアールヘクタールリットルワットカロリードルセントパーセントミリバールページmmcmkmmgkgccm2平成””No.KKTel(上)(中)(下)(左)(右)(株)(有)(代)明治大正昭和≒≡∫∫Σ√⊥∠LΔ∵∩∪';
$patternsCount = count($envDependCharacterPatterns);
// 繰り返して書き換える
for ($i = 0; $i < $patternsCount; ++$i)
{
if (strpos($s, $envDependCharacterPatterns[$i]) === FALSE) { continue; }
$pattern = '/\G(' . REGEXP_NORMAL_CHARACTERS . '?)\Q' . $envDependCharacterPatterns[$i] . '\E/';
$replacement = '$1' . $envDependCharacterReplacements[$i];
$s = preg_replace($pattern, $replacement, $s);
}
print_r('変換後結果出力:<br>');
print_r($s);
?>
補足
求めていた完璧な答えです。ありがとうございます。 ただ、一つ疑問が残っていて、 「\」の正規表現は\\なのではないでしょうか? もし「\\」が欲しい場合は\\\\のよう二思うのですが、 なぜ3つなのでしょうか?