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

perlとMySQLでデータベースを作っています。
だいぶ行き詰ってしまったので質問させてください。

以下のような一行の文字列が存在するとします。

ABC DEF @@@2222 EHI J @@@888 KL MN OPQR @@@632 ST

この中から、
2222
888
632
を取り出して配列に格納することは可能でしょうか?

分割することは可能な気はするのですが、
それを配列に入れるとなるとどうにもならなくなってしまいました。

漠然とした質問で大変申し訳ないのですが、
なにかヒントになるものだけでもお気づきの方いらっしゃいましたら、
ぜひご教示くださいませ。

A 回答 (3件)

やり方はいろいろありますが、「英数字と空白以外の文字列」に続く「英数字文字列」を配列に入れるなら、


$str='ABC DEF @@@2222 EHI J @@@888 KL MN OPQR @@@632 ST';
(@array)=($str=~/(?<=[^\s\w])(\w+)/g);
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

なるほど!
>(?<=[^\s\w])(\w+)/g);
この部分を解読していて、
こんな方法もあるのかと感心してしまいました。

今はとりあえずspliceを使ってうまくいっているのですが、
バグが出るようならこちらの方法で試してみたいと思います。
ありがとうございました。

お礼日時:2010/01/29 09:11

この文章だけからは「何を取り出すのか」が分かりません.


どんな文字列が来てもいいように, 言葉で「取り出すべきもの」を規定してください. それができなければ, プログラムにすることは不可能です.
案外
s/@@@(\d+)/g
くらいだったりして.
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

言葉足らず過ぎてすみませんでした。
今回のケースでは、
逆に後で分割するために@@@という文字列を途中で足していました。
ですので取り出すべきものは、
@@@直後にある不特定数桁の数字というものでした。

このままだと分割するのに困ったので、
街頭数字の頭と末尾両方に@@@を入れることでなんとか解決することができました。
ありがとうございました。

お礼日時:2010/01/29 09:08

まず、文字列をスペースでsplitします。



その配列の要素ひとつひとつに対し、
@@@を含むか否か、をジャッジします。

含むものだけを抜き出し、別の配列に格納します。
その配列の全ての要素に対し、
@@@を削除する処理を施します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

論理的な処理順序はなんとか理解できていたのですが、
>含むものだけを抜き出し、別の配列に格納します。
この部分の方法が思いつきませんでした。

結局spliceという関数でなんとかすることができました。
ヒントをいただき、ありがとうございました。

お礼日時:2010/01/29 09:05

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