2011年2月 3日

[PHP-users 35481] Re:preg_match_allについて

森といいます。

> ところで、改行を全て削除してしまってからでも
> 同じアウトプットは可能でしょうか?
について考えてみました。

サブパターンでマッチさせたい文字列について、もう少し工夫できると思います。
item_no, priceA, priceB の3項目は数字のみ含まれるのでしたら、


"/item_no:(\d+)商品名:(.*?)priceA:(\d+)priceB:(\d+)/"

のようにできるかと思います。

ただ、商品名はいろんな文字が含まれると思いますので、難しいですよね。
それで、商品名の (.*?) が期待している以上に広くマッチして

[0] => Array
(
[0] => item_no:123456商品名:あいうえおpriceA:520item_no:112235商品名:かきくけこpriceA:380priceB:200
[1] => 123456
[2] => あいうえおpriceA:520item_no:112235商品名:かきくけこ
[3] => 380
[4] => 200
)

となってしまいます。

もし、商品名には「:」が含まれないと分かっているなら、

"/item_no:(\d+)商品名:([^:]+)priceA:(\d+)priceB:(\d+)/"

で期待通りにマッチすると思います。

※ 備考
今回の例では大丈夫ですが、
「改行を含めた状態に対して処理する」という方針をとった場合に、
「データの末尾に改行が無い」というデータがあると、

"/item_no:([^\n]+)\n商品名:([^\n]+)\npriceA:([^\n]+)\npriceB:([^\n]+)\n/"

を使った場合には、最後のアイテムを取り損ねてしまう可能性があると思います。
最後の改行がマッチしないからです。
例では、「商品名:はひふへほ」のデータです。
なので、最初に改行を追加するといった処理がある方がいいのかもしれません。
_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2011年2月 3日 22:30
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/101772
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。