我想将abc49.99ab55.5def89de7
分割成块以获得下面的结果(或类似的结果)。:只允许abc
, ab
, def
和de
。可以是浮点数
理想的情况是这样的:
Array
(
[abc] => 49.99
[ab] => 55.5
[def] => 89
[de] => 7
)
这个也可以:
Array
(
[0] => abc49.99
[1] => ab55.5
[2] => def89
[3] => de7
)
在看了一些例子之后,我提出了下面的例子,但不幸的是,不能增强它们以满足上面定义的需求。请你帮忙处理这件事好吗?
1preg_match('/(?<fo>abc|ab)?(?<fn>'d*'.?'d*)(?<so>def|de)?(?<sn>'d*'.?'d*)?/', 'abc49.99ab55.5def89de7', $matches);
Array
(
[0] => abc49.99
[fo] => abc
[1] => abc
[fn] => 49.99
[2] => 49.99
[so] =>
[3] =>
[sn] =>
[4] =>
)
2 preg_match_all('~^(.*?)('d+)~m', 'abc49.99ab55.5def89de7', $matches);
Array
(
[0] => Array
(
[0] => abc49
)
[1] => Array
(
[0] => abc
)
[2] => Array
(
[0] => 49
)
)
根据OP的要求。这应该对你有用:
<?php
$str = "abc49.99ab55.5def89de7";
$arr = preg_split("/(?<=[0-9])(?=[a-z])/i", $str);
print_r($arr);
?>
正则表达式的解释:
/(?<=[0-9])(?=[a-z])/i
- (?<=[0-9]) Positive Lookbehind -断言下面的正则表达式可以匹配
- [0-9]匹配下面列表中的单个字符
- 0-9 0到9之间的单个字符
- [0-9]匹配下面列表中的单个字符
- (?=[a-z]) Positive Lookahead -断言下面的正则表达式可以匹配
- [a-z]匹配下面列表中的单个字符
- a-z在a和z之间的单个字符(不区分大小写)
- [a-z]匹配下面列表中的单个字符
标记:
- i修饰符:不敏感。不区分大小写的匹配(忽略大小写[a-zA-Z])