- ベストアンサー
謎の文字列置換(正規表現)
漢字かな、アルファベット(全角)、数字(半角)の混在した文章中で、二桁の数字のみ文字の前後に記号(例:♪)を付けたいとします。 正規表現に対応した置換ソフトやテキストエディタで 置換前:\b(\d{2})\b 置換後:♪$1♪ とすると、特定の文字の後ろにある二桁数字のみ検索から漏れて置換されないのですが、どこが間違っているのでしょうか。 <使用したテキストエディタ> k2editor <使用した置換ソフト> Speeeeed <置換から漏れる特定文字> 学、浜、工、田、修など <具体例>置換前 23 学23 23学 2323 浜23浜 <具体例>置換後 ♪23♪ 学23 ♪23♪学 2323 浜23浜
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
\bは「単語境界」を示します。 aやbといった文字列で挟んでも置換されませんよね? ということは、恐らく今回意図されている表現ではないと思います。 逆になんで一部置換されてしまうのかについては、マルチバイト入った時の\wや\Wをどう解釈するのかによりそうです。 後はその際の文字コードとか・・・というぐらいの曖昧な事しか自分にはわかりません。 取り敢えず、先読みや戻り読みでの否定が使えれば要件自体は解決できると思います。 例に挙げられているエディタや置換ツールはわからないのですが、 鬼車という処理系での動作結果だけ載せておきます。 --------------------------- サクラエディタ 本体 Ver.2.0.2.0 bregonig.dll Ver.2.0.3 置換前(N): (?<!\d)(\d{2})(?!\d) 置換後(P): ♪$1♪ --------------------------- Ruby http://ideone.com/5m2Gn ---------------------------
お礼
ありがとうございました。紹介いただいた方法とエディタを利用することで解決しました。これで仕事がはかどります。 他で検索していた時に二桁数字だけを抽出というのが\b\b{2}\bとなっていたので、ここがそもそも間違っているということに思い至りませんでした。