0

文字列に preg_split を使用していますが、必要な出力が得られません。例えば

$string = 'Tachycardia limit_from:1900-01-01 limit_to:2027-08-29 numresults:10 sort:publication-date direction:descending facet-on-toc-section-id:Case Reports';
$vals = preg_split("/(\w*\d?):/", $string, NULL, PREG_SPLIT_DELIM_CAPTURE);

出力を生成しています

 Array
(
    [0] => Tachycardia 
    [1] => limit_from
    [2] => 1900-01-01 
    [3] => limit_to
    [4] => 2027-08-29 
    [5] => numresults
    [6] => 10 
    [7] => sort
    [8] => publication-date 
    [9] => direction
    [10] => descending facet-on-toc-section-
    [11] => id
    [12] => Case Reports
)

どちらが間違っている、それを出力したい

Array
(
    [0] => Tachycardia 
    [1] => limit_from
    [2] => 1900-01-01 
    [3] => limit_to
    [4] => 2027-08-29 
    [5] => numresults
    [6] => 10 
    [7] => sort
    [8] => publication-date 
    [9] => direction
    [10] => descending
    [11] => facet-on-toc-section-id
    [12] => Case Reports
)

正規表現に問題がありますが、修正できません。

4

3 に答える 3

5

私は使うだろう

$vals = preg_split("/(\S+):/", $string, NULL, PREG_SPLIT_DELIM_CAPTURE);

出力はまさにあなたが望む通りです

于 2012-11-15T09:29:55.383 に答える
1

代わりにこの正規表現を試して、分割パターンに「-」または他の文字を含めてください:http: //regexr.com? 32qgs

((?:[\w\-])*\d?):
于 2012-11-15T09:24:13.043 に答える
1

これは、\wクラスに文字が含まれていないためです-。そのため、 \w も展開します。

/((?:\w|-)*\d?):/
于 2012-11-15T09:25:10.373 に答える