如何在字符串中的某个单词之前和之后获取所有内容

时间:2013-03-25 00:22:16

标签: php string variables word

如何在某个单词之前和之后获取php字符串中的所有内容?例如,如果我有一个“5次8”的字符串,我如何提取5和8并将它们存储到单独的变量中?我是PHP的新手。

我试过

$foo = "5 times 8";
$foo = str_replace(" times ","",$foo);
那么什么?结果是“58”

6 个答案:

答案 0 :(得分:16)

如果您确定输入字符串包含" times ",那么您可以这样做:

$input = "5 times 8";
list($a, $b) = explode(' times ', $input);

echo $a; // "5"
echo $b; // "8"

如果您需要做一些更复杂的事情,请使用正则表达式:

$input = "5 times 8";
if (preg_match('!(\d+)\s*times\s*(\d+)!i', $input, $m)){
    $a = $m[1];
    $b = $m[2];
}

答案 1 :(得分:4)

您可以使用explode()功能,如下所示:

$string = "5 times 8";
$var = explode(' times ', $string);
echo $var[0]; //echoes 5
echo $var[1]; //echoes 8

答案 2 :(得分:2)

你可以explode()使用你的字符串......

$string = "5 times 8";
$var = explode(' times ', $string);
echo $var[0]; //echoes 5
echo $var[1]; //echoes 8

这将有效

答案 3 :(得分:1)

你在问题​​中说过“如何在某个词之前和之后获得所有”。所以这将获得所有。将.*的实例替换为例如\d*以获得例如任意一侧的数字。

如果根本找不到匹配,则以下将返回0;如果找到匹配,则返回> 0。

preg_match_all('/^(.*)times(.*)$/', $yourStringToSearch, $arr, PREG_PATTERN_ORDER);

如果找到匹配项,则会填充$arr

因此,例如,如果找到“时间”,但没有前/后文本,则它将返回1,$arr[0]将仅包含“时间”。

例如,如果$yourStringToSearch包含“5次8”,那么$arr将填充如下(其中$arr[0]是整个匹配,$arr[1]是前置文本,$arr[2]是后置文本。

Array
(
    [0] => Array
        (
            [0] => 5 times 8
        )

    [1] => Array
        (
            [0] => 5
        )

    [2] => Array
        (
            [0] =>  8
        )

)

但是,要小心,因为如果$yourStringToSearch = "5 _times_ -times- 8"它将返回:

Array
(
    [0] => Array
        (
            [0] => 5 _times_ -times- 8
        )

    [1] => Array
        (
            [0] => 5 _times_ -
        )

    [2] => Array
        (
            [0] => - 8
        )

)

那就是 - 您需要在搜索字符串在目标中出现多次的情况下指定您想要发生的事情,或者在这种情况下接受“默认”,其中搜索字词的第一个匹配项为“ “匹配。

如果您需要确保搜索词被空格包围,那么以下两个将起作用。首先假设您不想“捕获”空间,而第二个将包括捕获中的空间:

preg_match_all('/^(.*) times (.*)$/', $yourStringToSearch, $arr, PREG_PATTERN_ORDER);

preg_match_all('/^(.* )times( .*)$/', $yourStringToSearch, $arr, PREG_PATTERN_ORDER);

答案 4 :(得分:1)

我不完全确定你在尝试什么,但也许这会有所帮助:

如果你用explode($delimiter, $string, [$limit])爆炸字符串,那么你就是一个例子"次"作为$ delimiter,你可以获得一个数组为5和8的数组。

因此:

$string = "5 times 8"
$delimiter = " times "
$array = explode($delimiter, $string)

会产生

$array[0] = 5
$array[1] = 8

希望这有帮助!

答案 5 :(得分:0)

您可以使用substr功能:http://www.php.net/manual/en/function.substr.php 如果您不知道该单词的位置,请使用strpos获取该单词:http://php.net/manual/en/function.strpos.php