[正規表現]特定文字列以前or以降を取り出すにはどう書けばいいのでしょうか?


例1:特定文字列以前を取り出す。
元文字列 "abcdefghijklmnopqrstuvwxyz"
特定文字列 "ghi"
期待する結果 "abcdef"

例2:特定文字列以降を取り出す。
元文字列 "abcdefghijklmnopqrstuvwxyz"
特定文字列 "stu"
期待する結果 "vwxyz"

回答の条件
  • 1人1回まで
  • 登録:2007/06/30 15:00:27
  • 終了:2007/06/30 16:43:00

回答(2件)

id:Bookmarker No.1

しおり回答回数191ベストアンサー獲得回数342007/06/30 15:29:31

ポイント50pt

正規表現といっても色々ありますが、Ruby ならこんな感じ。

#!/usr/local/bin/ruby

md = /ghi/.match('abcdefghijklmnopqrstuvwxyz')
p $`		# => "abcdef"
p md.pre_match	# => "abcdef"
p $'		# => "jklmnopqrstuvwxyz"
p md.post_match	# => "jklmnopqrstuvwxyz"
id:joemoriyama

すいません、言語を書き忘れてしまいました。残念ながらRubyはよくわかりません。

現在、perlで

$string = 'abcdefghijklmnopqrstuvwxyz';

$result1 = substr($string, 0, index($string, 'ghi'));

$result2 = substr($string, index($string, 'ghi') + length('ghi'));

こんな感じでやっているのですが、もっとすっきりできないものかと思って質問しました。

2007/06/30 16:01:32
id:GEN111 No.2

GEN111回答回数472ベストアンサー獲得回数582007/06/30 16:17:58

ポイント84pt

Perl ならこうとか。

区切り文字列が複数あらわれる場合の扱いにもよりますが。

$str = "abcdefghijklmnopqrstuvwxyz" ;

$str =~ /(.*)(?=ghi)/ ;
print "$1\n" ;

$str =~ /(?<=stu)(.*)/ ;
print "$1\n" ;
id:joemoriyama

おお、すばらしい。

とりあえず区切り文字列が複数あらわれる場合は考慮していないので、これでいけそうです。

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

2007/06/30 16:40:21
  • id:lunlumo
     perlでも$`と$'が使えますよ。

    #!/usr/local/bin/perl

    my $str = 'abcdefghijklmnopqrstuvwxyz';
    if ($str =~ m/ghi/) {
    print "pre match:$`\n";
    print "post match:$'\n";
    }

    1;

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません