正規表現道場@2ch Part4
■ このスレッドは過去ログ倉庫に格納されています
0206nobodyさん
05/03/02 11:34:17ID:???私がやるとすればPerlメモ(ttp://www.din.or.jp/~ohzaki/perl.htm)にある
例を利用してあらかじめ
$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
$char = qr{(?:$ascii|$twoBytes|$threeBytes)};
$eucpre = qr{(?<!\x8F)};
$eucpost = qr{
(?=
(?:[\xA1-\xFE][\xA1-\xFE])* # JIS X 0208 が 0文字以上続いて
(?:[\x00-\x7F\x8E\x8F]|\z) # ASCII, SS2, SS3 または終端
)
}x;
を用意しておいて、
1 while s{$eucpre(?:「((?:(?!「)$char)*?)」)$eucpost}{<em>$1</em>}o;
てな感じかな。キモは
[^」]を実現するのに、否定先読み+ASCIIまたはEUC1文字にマッチするパターンを使用
全体が1バイトずれてマッチしないように$eucpre,$eucpostを前後につけた
というあたりです。
■ このスレッドは過去ログ倉庫に格納されています