5

我有一些可以采用以下格式的字符串

sometext moretext 01 文本
文本一些文本更多文本002
text text 1 (somemoretext)
ETC

我想将这些字符串拆分为以下内容:数字和数字之前的文本

例如: text text 1 (somemoretext)
分割时会输出:
text = text text
number = 1

数字后面的任何东西都可以丢弃

已经阅读了有关使用正则表达式的信息,并且可能使用了 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捕获组一次性完成所有操作:

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 回答