我有一些字符串可以采用以下格式
sometext moretext 01 text text sometext moretext 002 text text 1 (somemoretext) etc
我想将这些字符串拆分为以下内容:数字前面的文字和数字
例如:文本文本1(somemoretext)
分割时输出:
text =文字文字
数字= 1
数字后面的任何东西都可以丢弃
已经阅读了有关使用正则表达式的内容,并且可能使用preg_match或preg_split,但在正则表达式部分时却丢失了
答案 0 :(得分:14)
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];
答案 1 :(得分:2)
如果您希望匹配每行使用preg_match_all():
,请使用m modifier +$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";
}