• ベストアンサー

Perlの正規表現

Perlの正規表現で質問です。 例えば、 "aabbccddee"と"cdde"という2種の文字列があるとして"cdde"だけを検索(または置換)したい場合の正規表現ってどのようにすればよいのでしょうか? いま、"cdde"で検索すると"aabbccddee"と"cdde"の2種類がヒットしてしまうのですが"cdde"だけヒットするような正規表現をどなたかご教示ください。 宜しくお願い致します。

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

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

/^cdde$/ で、どうでしょう。 (^は先頭を、$は末尾を現します。 つまり前後に余計な文字が付いたデータはマッチしなくなります)

msak777
質問者

補足

迅速な回答ありがとうございます。非常に助かりました。 あと、もう1つ伺いたいことが! 見捨てずに回答お願い致します。 例えば以下のような場合、 $aa = "abccddeeff"; #(1) $bb = "abccddeeeff"; #(2) $aa =~ s/cddee/xxxx/; $bb =~ s/cddee/xxxx/; print $aa; print $bb; printでは、"abcxxxxff"と"abcxxxxeff"と置換され表示されます。 これを(1)の変数$aaだけ"abcxxxxff"と置換され(2)のほうは置換されずに "abccddeeeff"とさせるにはどのような正規表現だとよろしいでしょうか? (1)、(2)両方の文字列に"cddee"があるためどちらもヒットする部分が置換されてしまい困っています。

その他の回答 (3)

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.4

例しか示されていないので、具体的にどういう条件で置換処理をしたいのかがわかりません。 条件を例示ではなく、詳しい説明で書きましょう。 文章で説明できなければ解決不可能です。

msak777
質問者

お礼

回答ありがとうございます。 表現能力も鍛えてから出直してきます。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

>$aa =~ s/cddee/xxxx/; >$bb =~ s/cddee/xxxx/; 単なる文字列置換しか習得できていないように思われます。 多少 "正規表現" について勉強された方が良いようです。

msak777
質問者

お礼

回答ありがとうございます。 もう少し勉強して出直します。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

単純に /(cdde)[^e]/ とか /[^c](cdde)/ とか何らかの方法で aabbccddee を排除するだけではないの?