正規表現でおたずねします。


以下の文字列があった場合、
$lines = '<a href="abcdefg">';
$lines =~ m /href="(.*?)"/ ;

でマッチしてabcdefgを抽出できるのですが、

$lines = '<a href="abcdefg" target="_blank">';
$lines =~ m /href="(.*?)"/ ;

の場合は、「abcdefg" target="_blank」まで抽出してしまいます。

一番目の「"」までで抽出を終わらせたい場合はどうしたらいいでしょうか?

回答の条件
  • URL必須
  • 1人20回まで
  • 登録:
  • 終了:2007/09/28 10:35:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:wizemperor No.1

回答回数379ベストアンサー獲得回数52

ポイント35pt
$lines = '<a href="abcdefg" target="_blank">';
$lines =~ m/href="(.*?)"/ ;

でも、「abcdefg」のみが抽出されると思いますが…。貪欲でないマッチを意味する「?」が抜けてたりしませんか?

あるいは、

$lines = '<a href="abcdefg" target="_blank">';
$lines =~ m/href="([^"]*)"/ ;

のように書き方を変えてみてはどうでしょうか?

http://q.hatena.ne.jp/answer

id:zachouR

すいません、自分の勘違いでした。

このままでいけました。

2007/09/21 13:11:49
id:ootatmt No.2

回答回数1307ベストアンサー獲得回数65

ポイント35pt

perl 5.8.7 では、うまくいきましたよ。

perl のバージョンが低いのではないですか。

$lines = '<a href="abcdefg" target="_blank">';

$lines =~ /href="(.*?)"/;

print $1;

http://www.kent-web.com/perl/chap7.html

id:zachouR

すいません、上記の通り勘違いでした。

パールのバージョンは、perl 5.8.7 です。

そのままいけました。

2007/09/21 13:12:36
  • id:samejima
    $lines = '<a href="abcdefg" target="_blank">';
    $lines =~ m /href="(.*?)"/ ;
    print $1, "\n";
    を実行すると
    abcdefg
    と出るので、質問の意図が解らないです。
  • id:zachouR
    すいません、勘違いでした。

    新しい質問で、2番目の「"」までをマッチ、3番目の「"」までをマッチ、の方法を聞こうと思います。

    お騒がせしました。

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

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

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

回答リクエストを送信したユーザーはいません