通过应用一些规则将字符串拆分成块
Splitting string into chunks by applying some rules
我想将 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
)
在看到一些例子后,我想出了下面的例子,但遗憾的是无法增强它们以满足上面定义的需求。你能帮忙解决这件事吗?
1
preg_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之间的单个字符
- (?=[a-z]) Positive Lookahead - 断言下面的正则表达式可以匹配
- [a-z] 匹配下面列表中的单个字符
- a-z 介于 a 和 z 之间的单个字符(不区分大小写)
- i修饰符:不敏感。不区分大小写的匹配(忽略 [a-zA-Z] 的大小写)
我想将 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
)
在看到一些例子后,我想出了下面的例子,但遗憾的是无法增强它们以满足上面定义的需求。你能帮忙解决这件事吗?
1
preg_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] 的大小写)