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

PHPで、正規表現で文字列を分割する方法がわかりません。
やりたいことは、

1|ねこ|2|こあら|3|りす

という文字列を、

1|ねこ 2|こあら 3|りす

というように、直前の文字が数字でない|で区切りたいです。
区切るための関数は、mb_splitを考えています。
http://php.benscom.com/manual/ja/function.mb-spl …



調べていて、以下のページに書かれている話が近いのかなと思うのですが、
そこで述べられている正規表現の仕組みがよく分からないでいます。
http://okwave.jp/qa1849763.html


ご教示よろしくお願いします。

A 回答 (1件)

あまり正規表現得意というわけでもありませんが・・。



(?<!\d)\|
でいかがでしょうか。
----------------
<?php
print_r(mb_split('(?<!\d)\|', "1|ねこ|2|こあら|3|りす"));
?>
----------------

> 調べていて、以下のページに書かれている話が
> 近いのかなと思うのですが、
> そこで述べられている正規表現の仕組みがよく分からないでいます。
正規表現の"後読み(lookbehind)"の否定を使っています。
参考URLを参照ください(lookbehindでページ内を検索してみてください)。

下に解説を書いてみます。

lookbehindの否定
(?<!foo)bar
は、"foo" 以外の後にある "bar" の存在を見つけるもの

この場合、
数字以外の後にある|を見つけたいので、
数字 → \d
| → \|

ということで、"foo" に "\d" を、 "bar" に "\|" を当てはめて
(?<!\d)\|
となりました。

参考URL:http://www.php.net/manual/ja/reference.pcre.patt …
    • good
    • 0
この回答へのお礼

ありがとうございます。解決しました。
たいへん助かりました。

お礼日時:2008/01/03 00:12

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