■ phpの場合
文字列置換関数 preg_replace は、文字列で検索パターンを指定すると
$str = preg_replace('/^[abcdefg]+/u', '', $str);
このようになるが、16進文字コード(utf8)で検索文字を指定する場合は、
$str_match = "/[".pack('CCC', 0xe6, 0x96, 0x87).pack('CCC', 0xe5, 0xad, 0x97)."]+/u"; $str = preg_replace($str_match, '', $str);
というように、一旦検索パターンを作業用の文字列に格納し、それを検索パターンとして指定すれば良いようだ。
ちなみに、上の例は
・pack('CCC', 0xe6, 0x96, 0x87) = '文'
・pack('CCC', 0xe5, 0xad, 0x97) = '字'
検証スクリプトの全文は次の通り
test.php
<?php $str = 'これは、★文字★字★列★の一部を置換します'; $str_match = "/[".pack('CCC', 0xe6, 0x96, 0x87).pack('CCC', 0xe5, 0xad, 0x97)."]+/u"; $str = preg_replace($str_match, "xxxx", $str); print "str=".$str.";"; ?>
■ Perlの場合
test.pl
#!/usr/bin/perl use warnings; use strict; use utf8; binmode STDOUT,":utf8"; my $str = 'これは、★文字★字★列★の一部を置換します'; my $str_match = '['.pack('U0C*', 0xe6, 0x96, 0x87).pack('U0C*', 0xe5, 0xad, 0x97).']'; $str =~ s/$str_match//g; print "str_match=".$str_match."\n"; print "str=".$str."\n";