5

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

我试过了

$foo = "5 times 8";
$foo = str_replace(" times ","",$foo);

然后呢?结果是“58”

4

6 回答 6

21

如果您确定您的输入字符串包含," 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];
}
于 2013-03-25T00:25:05.737 回答
5

您可以使用explode()函数,如下所示:

$string = "5 times 8";
$var = explode(' times ', $string);
echo $var[0]; //echoes 5
echo $var[1]; //echoes 8
于 2013-03-25T00:25:01.217 回答
3

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

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

这将起作用

于 2013-03-25T00:28:11.840 回答
1

您在问题中说过“如何在某个单词之前和之后获取所有内容”。所以这将得到一切。将 的实例替换为.*eg\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
        )

)

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

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

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

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

于 2013-03-25T00:26:03.537 回答
1

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

如果您使用explode($delimiter, $string, [$limit])来分解字符串,在您将“times”作为$delimiter 的示例的情况下,您可以获得一个以5 和8 作为值的数组。

所以:

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

会产生

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

希望这可以帮助!

于 2013-03-25T00:29:15.640 回答
0

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

于 2013-03-25T00:27:12.913 回答