、それは他のルールにそれを必要と除いて何も一致しません。全体一致の終了を指定する他の規則はありません。したがって、最後の部分sami
は正規表現によって単純にスキップされます。あなたはこれを調べることができます
<?php
$data="Date:29-05-2016 11:36 - Mo:919530489323 - pdd:9339 - lpm:78JIOP - pas:sami";
preg_match('#Date:(.*?) (.*?) - Mo:91(.*?) - pdd:(.*?) - lpm:(.*?) - pas:(.*?)#',$data,$matches);
var_dump($matches);
どの出力この:全体的に一致する文字列($matches[0]
)値が実際に最後:
で停止し
array(7) {
[0]=>
string(70) "Date:29-05-2016 11:36 - Mo:919530489323 - pdd:9339 - lpm:78JIOP - pas:"
[1]=>
string(10) "29-05-2016"
[2]=>
string(5) "11:36"
[3]=>
string(10) "9530489323"
[4]=>
string(4) "9339"
[5]=>
string(6) "78JIOP"
[6]=>
string(0) ""
}
注意してください。そのため、空の文字列が$matches[6]
にあります。
<?php
$data="Date:29-05-2016 11:36 - Mo:919530489323 - pdd:9339 - lpm:78JIOP - pas:sami";
preg_match('#^Date:(.*?) (.*?) - Mo:91(.*?) - pdd:(.*?) - lpm:(.*?) - pas:(.*?)$#',$data,$matches);
var_dump($matches);
お知らせ私が追加した^
と$
:問題を修正する正規表現をChainging
。それらは "文字列の始まり"と "文字列の終り"と一致します。したがって、最後の文字列:
から入力文字列の最後までの文字列が含まれます。これは次を出力します:
array(7) {
[0]=>
string(74) "Date:29-05-2016 11:36 - Mo:919530489323 - pdd:9339 - lpm:78JIOP - pas:sami"
[1]=>
string(10) "29-05-2016"
[2]=>
string(5) "11:36"
[3]=>
string(10) "9530489323"
[4]=>
string(4) "9339"
[5]=>
string(6) "78JIOP"
[6]=>
string(4) "sami"
}
意味はありません....「print_r'」と表示されます –
再現可能なコードを提供してください。 'pdd'と' lpm'の間には、文字列に新しい行はありません。また、 '。*?'よりも厳密な正規表現を書いています。 – chris85