• ベストアンサー

この正規表現を教えてください。

「小説、ドキュメンタリー(社会、動物)」 のような文字列があり、括弧内の”、”だけを”/”に変換して 「小説、ドキュメンタリー(社会/動物)」 のようにする正規表現はどのようにしたらよいでしょうか。 どうかお教えくださいませ。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

use encoding 'utf8'; binmode STDOUT, ":raw:encoding(shiftjis)"; $data='「小説、ドキュメンタリー(社会、動物、生態)(数学、整数論)」'; $data =~ s/(.+?)/($wk=$&)=~tr|、|/|,$wk/ge; print $data;

nihon_no_samurai
質問者

お礼

ありがとうございました!

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

(社会、動物、生態)→(社会/動物/生態) というような場合もあるのでしょうか? 文字コードがUTF-8という前提で use encoding 'utf8'; #binmode STDOUT, ":raw:encoding(shiftjis)"; $data='「小説、ドキュメンタリー(社会、動物)」'; $data =~ s/((.+?)、(.+?))/(\1/\2)/g; print $data;

  • taseki
  • ベストアンサー率66% (155/233)
回答No.1

文字コードがEUC-JPという前提で…。 $str = '小説、ドキュメンタリー(社会、動物)'; $ascii = '[\x00-\x7F]'; $twoBytes = '(?:[\x8E\xA1-\xFE][\xA1-\xFE])'; $threeBytes = '(?:\x8F[\xA1-\xFE][\xA1-\xFE])'; $character = "(?:$ascii|$twoBytes|$threeBytes)"; $str =~ s/\G((?:$character)*?((?:$character)*?)(?:、)((?:$character)*?))/$1/$2/g; print $str;

nihon_no_samurai
質問者

お礼

できました! ありがとうございました。

関連するQ&A