Regex表示任何数字,后跟空格,然后是一个带空格的字符串



我已经尝试了很多方法来找到将字符串拆分为数组的方法,我发现正则表达式可以帮助我。我需要的最接近的结果是这个正则表达式:d+^[ a-zA-Z],但它是不完整的。

我的字符串是这样的:

$str = '12 Cheeseburger bacon 2 Chips 3 Coke'

我需要的结果是一个包含这个结果的数组:

[0] = 12 Cheeseburger bacon
[1] = 2 Chips
[2] = 3 Coke

感谢大家帮助

此模式d+^[ a-zA-Z]匹配1个以上的数字,然后使用^断言字符串的开头,这是不正确的。然后它匹配[ a-zA-Z]中的单个字符

您可以获得3个结果,其中匹配的数字和后面的匹配字符a-zA-Z在重复中前面有一个空格。

bd+(?:h+[A-Za-z]+)+b
  • b单词边界
  • d+匹配1+位数字
  • (?:非捕获组
    • h+[A-Za-z]+匹配范围A-Za-z中的任何一个的1+空间和1+倍
  • )+重复1次以上
  • bA字边界

Regex演示| Php演示

$re = '/bd+(?:h+[A-Za-z]+)+b/';
$str = '12 Cheeseburger bacon 2 Chips 3 Coke';
preg_match_all($re, $str, $matches);
print_r($matches[0]);

输出

Array
(
[0] => 12 Cheeseburger bacon
[1] => 2 Chips
[2] => 3 Coke
)

您可以使用preg_split:

preg_split('~s+(?=d)~', $s)

此正则表达式匹配数字前的一个或多个空白字符。请参阅regex演示。

请参阅PHP演示:

$s = '12 Cheeseburger bacon 2 Chips 3 Coke';
print_r(preg_split('~s+(?=d)~', $s));

输出:

Array
(
[0] => 12 Cheeseburger bacon
[1] => 2 Chips
[2] => 3 Coke
)