PHP - 基于给定分隔符提取子字符串的最有效方法?

时间:2011-09-08 10:52:51

标签: php regex string

我有一个字符串,其中包含我需要提取的一些值。这些值中的每一个都由一个共同的字符包围。

将所有这些值提取到数组中的最有效方法是什么?

例如,给定以下字符串:

stackoverflowis%value1%butyouarevery%value2%

我想获得一个包含value1value2

的数组

6 个答案:

答案 0 :(得分:3)

$s = "stackoverflowis%value1%butyouarevery%value2%";
preg_match_all('~%(.+?)%~', $s, $m);
$values = $m[1];

preg_match_all

答案 1 :(得分:1)

尝试爆炸。比如$ array = explode('%',$ string);

LE

<?php

$s = 'stackoverflowis%value1%butyouarevery%value2%';
$a = explode('%', $s);
$a = array_filter($a, 'strlen'); // removing NULL values
$last = ''; // last value inserted;
for($i=0;$i<=count($a);$i++)
    if (isset($a[$i+1]) && $a[$i] <> $last)
        $t[] = $last = $a[$i+1];

echo '<pre>'; print_r($t); echo '</pre>';

答案 2 :(得分:1)

$string = 'stackoverflowis%value1%butyouarevery%value2%';
$string = trim( $string, '%' ); 
$array = explode( '%' , $string );

答案 3 :(得分:1)

$str = "stackoverflowis%value1%butyouarevery%value2%";
preg_match_all('/%([a-z0-9]+)%/',$str,$m);
var_dump($m[1]);

array(2) { [0]=> string(6) "value1" [1]=> string(6) "value2" }

答案 4 :(得分:1)

使用explode并从结果数组中获取奇数索引值。您表示您想要最有效的方法,这将比正则表达式解决方案更快。

$str = 'stackoverflowis%value1%butyouarevery%value2%';
$arr = explode('%', $str);

$ct = count($arr);

for ($i = 1; $i < $ct; $i += 2) {
    echo $arr[$i] . '<br />';
}

答案 5 :(得分:0)

preg_match_all('/%([^%]+)%/', $s, $match);
var_dump($match[1]);