perlの正規表現について教えてください
[上に]
[前に]
[次に]
カマイタチ
1999/08/06(金) 00:14:39
$str = "abcdefghijklmn"; のとき、"abcdefgh" を取り出す・・・具体的には、初めて出てきた "ijk" の直前までを取り出す方法を教えてください。
葉月
1999/08/06(金) 01:13:20
た〜んじゅんに、やっちゃうと
$str = "abcdefghijklmn";
$str =~ s/(^.*)(ijk.*)/$1/;
print $str;
# (^.*) : 行の最初から、改行以外のすべての文字にマッチ
# (ijk.*):ijkで始まり、その後ろは、改行以外のすべての文字にマッチ
# $1に(^.*)が代入され、$2に(ijk.*)が代入されるので、$strを$1に変換する
になるけど
葉月
1999/08/06(金) 01:22:03
いろいろと、つっこまれそうな書き方をしてしまった。。。
>変換
というより、置換でした。。。(他にも、ちょこちょこと...(--;;;)
ふじ
1999/08/06(金) 01:37:36
>$str =~ s/(^.*)(ijk.*)/$1/;
$str =~ s/(^.*?)(ijk.*)/$1/;
最小マッチにしないと、「最後に出て来たijk」の前の文字列、になりますね。
$str = "abcijkdefijklmn";
の場合に、 abc でなくて abcijkdef がひっかかる。
元の文字列を壊したくないなら
$str =~ /(^.*?)ijk/;
として $1 を参照するとか、
$str =~ /ijk/;
として $` を参照するとか。
[上に]
[前に]
[次に]