5

特定の単語の前後にすべてをphp文字列で取得するにはどうすればよいですか?たとえば、「5 x 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入力されます。

たとえば、「times」が見つかったが、前後のテキストがない場合は、1が返さ$arr[0]れ、「times」のみが含まれます。

したがって、たとえば、$yourStringToSearchが「5 x 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」一致である場合は「default」を受け入れる必要があります。 。

検索語がスペースで囲まれていることを確認する必要がある場合は、次の2つが機能します。最初はスペースを「キャプチャ」したくないと想定し、2番目はキャプチャにスペースを含めます。

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])を使用して文字列を分解すると、例として$ 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 に答える