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


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

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

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

回答2件)

id:Bookmarker No.1

回答回数191ベストアンサー獲得回数34

ポイント50pt

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

#!/usr/local/bin/ruby

md = /ghi/.match('abcdefghijklmnopqrstuvwxyz')
p $`		# => "abcdef"
p md.pre_match	# => "abcdef"
p $'		# => "jklmnopqrstuvwxyz"
p md.post_match	# => "jklmnopqrstuvwxyz"
Add Star
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

回答回数472ベストアンサー獲得回数58

ポイント84pt

Perl ならこうとか。

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

$str = "abcdefghijklmnopqrstuvwxyz" ;

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

$str =~ /(?<=stu)(.*)/ ;
print "$1\n" ;
Add Star
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;

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

トラックバック

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