• ベストアンサー

正規表現で一つ目の区切り文字で区切りたいのですが・・・

aaa/bbb/ccc/ddd aaa/bbb/ccc/ddd/eee aaa/ccc/ddd $a=~/(.*)\/(.*)/; $1はそれぞれ aaa/bbb/ccc aaa/bbb/ccc/ddd aaa/ccc と成ってしまいます。 このように 「最後の/」で分けられてしまいます。 一つ目の/で分けるにはどうしたらよいでしょうか。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

$a=~/^([^\/]*)\/(.*)/; としてみてはいかがでしょうか。

azicyan
質問者

お礼

おおおお! 出来ました! が・・・難しいですね・・・

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

.* だと「(それ以降で一致する限り) 最も長い文字列」になっちゃうので, そんな結果になりますね. Perl のバージョンにもよるけど, 今どきの Perl なら .*? で最短一致が指定できるので, $a =~ /(.*?)\/(.*)/; でうまくいったりしない? まあ split 使うって裏技もあるけど.

azicyan
質問者

お礼

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

  • shukugawa
  • ベストアンサー率30% (80/264)
回答No.1

行頭を意味する「^」を追加して、 $a=~/^(*)\/(*)/; とすればよいのではないでしょうか。

azicyan
質問者

補足

早速ありがとうございます。 残念ながらだめでした。 $a="aaa/bbb/ccc/ddd"; $a=~/^(.*)\/(.*)/; print $1."\n"; print $2."\n"; ((結果)) aaa/bbb/ccc ddd

関連するQ&A