<?php
$text="1SD1700 thanks for anybody who help me out,djkfdj fdjkd 9-sjf 908-_/E626 ACS71/2 AT91M4080-0 CD7a4AC283 H1$0G HG-3@02C HW-10/5C";
while(preg_match('/(\s|,)+[^\d]+(\s|,)+/',$text,$matches)){
$text=str_replace($matches[0],' ',$text);
}
while(preg_match('/(\s|,)+([^\s,]*[^\w\-\/\s,]+[^\s,]*)(\s|,)+/',$text,$matches)){
$text=str_replace($matches[0],' ',$text);
}
echo $text;
?>
$text="1SD1700 thanks for anybody who help me out,djkfdj fdjkd 9-sjf 908-_/E626 ACS71/2 AT91M4080-0 CD7a4AC283 H1$0G HG-3@02C HW-10/5C";
while(preg_match('/(\s|,)+[^\d]+(\s|,)+/',$text,$matches)){
$text=str_replace($matches[0],' ',$text);
}
while(preg_match('/(\s|,)+([^\s,]*[^\w\-\/\s,]+[^\s,]*)(\s|,)+/',$text,$matches)){
$text=str_replace($matches[0],' ',$text);
}
echo $text;
?>
您的表达式太难懂了,有没有执行速度快点的?
<?php
$result = '';
$text = '1SD1700 thanks for anybody who help me out,djkfdj fdjkd 9-sjf 908-_/E626 ACS71/2 AT91M4080-0 CD7a4AC283 H1$0G HG-3@02C HW-10/5C';
if (preg_match_all('([A-Za-z0-9-_/]+)',$text,$matches))
{
echo "<pre>";
for ($i=0; $i< count($matches[0]); $i++) {
if (preg_match('([0-9]+)',$matches[0][$i]) && preg_match('([A-Za-z]+)',$matches[0][$i]))
$result .= $matches[0][$i]." ";
}
}
echo $result;
您的代码基本可行,效率不高,根据我的特殊情况,该文本文件只有少量符合要求的,也就是能不能把您的代码改成这样的:先找出含有数字的字符串,然后再匹配是否含有字母,是否含有特殊字符,这样我想会快些。我根据您的代码改编一下,但是不成功,请大家指点一下。
if (preg_match_all('([0-9]+)',$text,$matches))//找出含有数字的,也不知个规则对不对
{
echo "<pre>";
for ($i=0; $i< count($matches[0]); $i++) {
if (preg_match('([A-Za-z0-9-_/]+)',$matches[0][$i]) && preg_match('([A-Za-z]+)',$matches[0][$i]))//是否含有特殊字符,是否含有汉字
$result .= $matches[0][$i]." ";
}
}
echo $result;
?>
echo join(' ', $r[0]);
我也是新手,这个正则也看不太明白,
不过楼主要求包含数字、并且包含字母..
1SD1700 9-sjf ACS71/2 CD7a4AC283 HW-10/5C
这样丢了很多东西
结果应该是 "1SD1700 9-sjf 908-_/E626 ACS71/2 AT91M4080-0 CD7a4AC283 HW-10/5C"
但 [A-Za-z0-9-_/] 本身是不符合正则约定的,应改为
[-A-Za-z0-9_/]
即出现在匹配列表中的“-”字符,应在列表开始或结束处