通过应用一些规则将字符串拆分为块

时间:2015-07-17 09:36:39

标签: php preg-match preg-match-all

我想将abc49.99ab55.5def89de7拆分成块以获得下面的结果(或类似)。 注意:仅允许abcabdefde。数字可以浮动。

理想情况下:

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
        )

)

1 个答案:

答案 0 :(得分:1)

来自OP的request。这应该适合你:

<?php

    $str = "abc49.99ab55.5def89de7";
    $arr = preg_split("/(?<=[0-9])(?=[a-z])/i", $str);
    print_r($arr);

?>

正则表达式解释:

/(?<=[0-9])(?=[a-z])/i
  • ?&lt; = [0-9])Positive Lookbehind - 断言下面的正则表达式可以匹配
    • [0-9]匹配下面列表中的单个字符
      • 0-9 0到9之间范围内的单个字符
  • ?= [a-z])Positive Lookahead - 断言下面的正则表达式可以匹配
    • [a-z]匹配下面列表中的单个字符
      • a-z a和z之间范围内的单个字符(不区分大小写)

flags

  • i 修饰符:不敏感。不区分大小写的匹配(忽略[a-zA-Z]的情况)