通过应用一些规则将字符串分割成块


Splitting string into chunks by applying some rules

我想将abc49.99ab55.5def89de7分割成块以获得下面的结果(或类似的结果)。:只允许abc, ab, defde。可以是浮点数

理想的情况是这样的:

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])