2017-09-11 14 views
2

私はテキストファイルを持っており、正規表現を使ってテキストを配列に分割したいと思っています。しかし、私は正規表現には新しいし、それを使う方法も知らない。 テキストファイルの形式は、基本的に次のとおりです。PHP codeigniter文字列を正規表現で配列に分割する

0,"20"1,"100000050"25,"100000050"19,""11,"Masuda"12,"Jin" 
I want to split them like: 
0: 0,"20" 
1: 1,"100000050" 
2: 25,"100000050" 
... 

助けてください!すべての答えは高く評価されます!

答えて

2

preg_split()関数を使用します。正規表現がpatternの入力パラメータとして受け入れられることを除いて、split()とまったく同じように動作します。

PREG_SPLIT_DELIM_CAPTUREを使用すると、区切り文字パターンにかっこ式が返されます。

preg_split(
    '/([\d]+,\"[0-9a-zA-Z]+\")/', 
    $str, 
    -1, 
    PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY 
); 

/([\d]+,\"[0-9a-zA-Z]+\")/は正規表現です。

/ = start or end of pattern string 
[ ... ] = grouping of characters 
\d - digits 
+ = one or more of the preceeding character or group 
, = the literal comma character 
\" = the literal quote character 
[0-9a-zA-Z] = numbers and letters 
+0

はい、それは完璧に動作します、ありがとうございます! – Tedxxxx

+0

私は正規表現が以下のテキストで正しく動作しない理由を知りません:79-1、 "Fresh Sea bass(野生) L"。常にが欠けています。 – Tedxxxx

1

ので、私は何かを逃しかもしれませんが、これは動作するはず奇妙なフォーマットのように思える:preg_match_all()

([0-9]+,\"([0-9a-z ]+)?\") 

詳細

[0-9]+   match a digit one or more times (this seems to be an ID of sorts) 
,     match a literal comma 
\"([0-9a-z ]+)?\" match an alphanumeric character or a space one or more times, optionally (you have an empty string), between quotes 
i     flag to make it case insensitive 

ペアその配列内のすべての一致を得るために、 :

<?php 
$string = '0,"20"1,"100000050"25,"100000050"19,""11,"Masuda"12,"Jin"'; 
preg_match_all("/([0-9]+,\"([0-9a-z]+)?\")/i", $string, $m); 
var_dump($m); 

第1のアレイwil私はあなたが必要とするものを持っています。

Demo

関連する問題