5

次の形式の文字列がいくつかあります

sometext moretext 01 テキスト
text sometext moretext 002
テキスト テキスト 1 (somemoretext)
等

これらの文字列を次のように分割したい: 数字の前のテキストと数字

例: text text 1 (somemoretext)
split が出力するとき:
text = text text
number = 1

number の後のものは破棄できます

正規表現の使用と、おそらく preg_match または preg_split の使用について読んだことがありますが、正規表現の部分に関してはわかりません

4

2 に答える 2

15
preg_match('/[^\d]+/', $string, $textMatch);
preg_match('/\d+/', $string, $numMatch);

$text = $textMatch[0];
$num = $numMatch[0];

または、キャプチャ グループを使用preg_match_allして、すべてを 1 回のショットで実行することもできます。

preg_match_all('/^([^\d]+)(\d+)/', $string, $match);

$text = $match[1][0];
$num = $match[2][0];
于 2013-01-15T22:24:31.147 に答える
2

すべての行を一致させたい場合は、preg_match_all() + を使用してm 修飾子を使用します。

$string = 'sometext moretext 01 text
text sometext moretext 002
text text 1 (somemoretext)
etc';
preg_match_all('~^(.*?)(\d+)~m', $string, $matches);

すべての結果は$matches次のような配列になっています。

Array
(
    [0] => Array
        (
            [0] => sometext moretext 01
            [1] => text sometext moretext 002
            [2] => text text 1
        )
    [1] => Array
        (
            [0] => sometext moretext 
            [1] => text sometext moretext 
            [2] => text text 
        )
    [2] => Array
        (
            [0] => 01
            [1] => 002
            [2] => 1
        )
)

出力例:

foreach ($matches[1] as $k => $text) {
    $int = $matches[2][$k];
    echo "$text => $int\n";
}
于 2013-01-15T22:26:39.447 に答える