【问题标题】:Php Preg_Match to get Quoted string in arrayPhp Preg_Match 在数组中获取带引号的字符串
【发布时间】:2015-03-10 04:53:25
【问题描述】:

需要在数组中获取带引号的字符串和不带引号的字符串

样本数据

$string='tennissrchkey1 tennissrchkey2 "tennis srch key 3" "tennis srch key 4" "tennis srch key 5"';    

期望的输出

Array
(
    [0] => tennissrchkey1
    [1] => tennissrchkey2
    [2] => tennis srch key 3
    [3] => tennis srch key 4
    [4] => tennis srch key 5
)

目前在尝试,但还没有成功

if (preg_match('/"([^"]+)"/', $string, $m)) {
    echo '<pre>';
    print_r($m);   
} else {
   //preg_match returns the number of matches found, 
   //so if here didn't match pattern
}

非常感谢任何帮助!!!

谢谢!!!

【问题讨论】:

  • 顺序重要吗?
  • 不,最终的数组可以包含任何顺序的值,但重要的是它包含突出显示的数据

标签: php arrays string preg-match


【解决方案1】:

使用preg_match_all 函数进行全局匹配。 (?|....) 称为 branch reset group。分支重置组内的备选方案共享相同的捕获组。

$re = '~(?|"([^"]*)"|(\S+))~m';
$str = 'tennissrchkey1 tennissrchkey2 "tennis srch key 3" "tennis srch key 4" "tennis srch key 5"';
preg_match_all($re, $str, $matches);
print_r($matches[1]);

DEMO

输出:

Array
(
    [0] => tennissrchkey1
    [1] => tennissrchkey2
    [2] => tennis srch key 3
    [3] => tennis srch key 4
    [4] => tennis srch key 5
)

【讨论】:

  • 我们快到了!!!!唯一的问题是双引号的字符串在最终数组中也被引用,例如“tennis srch key 3”“tennis srch key 4”我们如何从最终数组中删除这些引号?
【解决方案2】:
<?php
    $sString = 'tennissrchkey1 tennissrchkey2 "tennis srch key 3" "tennis srch key 4" "tennis srch key 5"';

    $aTmp = explode( ' "', $sString );
    $iCountPieces = count( $aTmp );
    for( $i = 0; $i < $iCountPieces; ++$i )
    {
        $aFormatted[] = trim( $aTmp[ $i ], '"' );
    }
    var_dump( $aFormatted );
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多