プロが教えるわが家の防犯対策術!

文字列の中間位置にマッチするアサーション表現

qr{ ^ \w+ \s+ \d+ \s+ \d+ $ }xms の規則で
$strに文字列が複数行格納されています。
スペースの個数に関しては任意です。

my $str = <<EOF ;
BBB 0 00
AAA 1 01
AAA 2 10
:
EOF

上記例で行頭がAAAで始まる、末尾の連続した数字の先頭にマッチする正規表現を教えて頂けないでしょか?
AAA 1 01
の01の先頭に位置にマッチするアサーションを知りたい

後読みを用いたいのですが、空白の数が任意のためうまく書けずに困ってます。

A 回答 (2件)

バージョンにもよるんだけど, \K って使えない?



参考URL:http://fleur.hio.jp/perldoc/perl/5.9.5/pod/perlr …
    • good
    • 0
この回答へのお礼

ありがとうございます。

実行環境が5.8のため、\Kを使うことは出来ないのですが大変参考になりました。

5.9での改版を全く知らなかったので勉強になりました。
やはり5.8以前の環境では後読みの非固定幅対応は難しいようですね。

見切りをつけて、他の方法を検討したいと思います。

お礼日時:2010/07/22 23:59

とりあえず「何をしたいのか」が見えないんだが....


その位置を知って, どうするの?

この回答への補足

説明不足で申し訳ありません

目的は
AAA 1 01
の01部分を置換することです。

処理を複数行に分けて行うことであれば、
実現できているのですが、
今後のために、このような位置にマッチする正規表現を学びたいと考えています。
拡張正規表現を組み合わせれば、これを実現できるのではと思っているのですが
難しくお知恵を拝借したい次第です。

イメージでは、知りたい位置にマッチする正規表現を$reとしたとき
 $str =~ s/$re ([01]+) $/sprintf("xxx(%s)", $1)/xmsg ;
等とダイレクトに置換することです。

補足日時:2010/07/21 00:34
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!