我正在尝试删除按类型分组的字符串(仅限ALPHA或DIGIT),而不使用任何其他字符。
我正在使用PHP,并希望使用REGEX。
我需要将输入字符串“ ES-3810 / 24MX ”转换为 [ES] [3810] [24] [MX] 等数组, 以及“ CISCO1538M ”等输入字符串到 [CISCO] [1538] [M] 等数组。
输入文件序列可以是无差别的DIGITS或ALPHA。
分隔符可以是非ALPHA和非DIGIT字符,也可以是DIGIT序列与APLHA序列之间的变化,反之亦然。
抱歉我的英语不好......希望我的解释看起来很清楚。
感谢您的大力帮助。
最好的问候。
答案 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);
我无法以更“清洁”的方式思考。