按组拆分字符串[ALPHA] [DIGIT] [ALPHA]

时间:2011-09-10 17:42:41

标签: php regex string split

我正在尝试删除按类型分组的字符串(仅限ALPHA或DIGIT),而不使用任何其他字符。

我正在使用PHP,并希望使用REGEX。

我需要将输入字符串“ ES-3810 / 24MX ”转换为 [ES] [3810] [24] [MX] 等数组, 以及“ CISCO1538M ”等输入字符串到 [CISCO] [1538] [M] 等数组。

输入文件序列可以是无差别的DIGITS或ALPHA。

分隔符可以是非ALPHA和非DIGIT字符,也可以是DIGIT序列与APLHA序列之间的变化,反之亦然。

抱歉我的英语不好......希望我的解释看起来很清楚。

感谢您的大力帮助。

最好的问候。

2 个答案:

答案 0 :(得分:3)

匹配正则表达式的所有出现的命令是preg_match_all(),它输出多维结果数组。正则表达式非常简单...任何数字([0-9])一次或多次(+)或(|)任何字母([A-z])一次或多次( +)。请注意大写A和小写z以包含所有大写和小写字母。

为方便起见,包含了textarea和php标签,因此您可以放入php文件并查看结果。

<textarea style="width:400px; height:400px;">
<?php

foreach( array(
        "ES-3810/24MX",
        "CISCO1538M",
        "123ABC-ThatsHowEasy"
    ) as $string ){

    // get all matches into an array
    preg_match_all("/[0-9]+|[[:upper:][:lower:]]+/",$string,$matches);

    // it is the 0th match that you are interested in...
    print_r( $matches[0] );

}

?>
</textarea>

textarea中的哪些输出:

Array
(
    [0] => ES
    [1] => 3810
    [2] => 24
    [3] => MX
)
Array
(
    [0] => CISCO
    [1] => 1538
    [2] => M
)
Array
(
    [0] => 123
    [1] => ABC
    [2] => ThatsHowEasy
)

答案 1 :(得分:1)

$str = "ES-3810/24MX35 123 TEST 34/TEST";
$str = preg_replace(array("#[^A-Z0-9]+#i","#\s+#","#([A-Z])([0-9])#i","#([0-9])([A-Z])#i"),array(" "," ","$1 $2","$1 $2"),$str);
echo $str;
$data = explode(" ",$str);
print_r($data);

我无法以更“清洁”的方式思考。