$arr = array( 'AAAA', 'BBBB', 'CCCC' );$str = "AAAA is good than CCCC";foreach($arr as $val){ if(false !== strpos($str,$val)) echo $val."<br />";}
$preg= "AAAA|BBBB|CCCC|DDDDD";$str = "AAAA is good than CCCC";if(preg_match_all("/$preg/i",$str,$m)){ print_r($m); }
我测了下:$arr = array(//一百条数据 "AAAAA0", "AAAAA1", ... "AAAAA99" ) $str = "这是中文这是中文这是中文这是中文这是中文这是中文这是中文 这是中文这是中文这是中文这是中文这是中文这是中文这是中文这是中文 this is english,this is english,this is english,this is english,this is english,this is english, this is english,this is english,this is english,this is english,this is english,this is english, this is english,this is english,this is english,this is english,this is english,this is english, this is english,this is english,this is english,this is english,this is english,this is english, !@#$%^&*()_+!@#$%^&*()_+!@#$%^&*()_+!@#$%^&*()_+!@#$%^&*()_+!@#$%^&*()_+!@#$%^&*()_+!@#$%^&*()_+ 把数据往后放把数据往后放把数据往后放把数据往后放把数据往后放把数据往后放把数据往后放把数据往后放把数据往后放 AAAAAA0######################AAAAA95AAAAA96AAAAA97AAAAA98AAAAA99"; foreach($arr as $val){ if(false !== strpos($str,$val)) echo $val."<br />";} //输出为: AAAAA0 AAAAA9 AAAAA95 AAAAA96 AAAAA97 AAAAA98 AAAAA99 Total in 0.00027585029602051 seconds 你难度是我一百倍行不,也难出一秒范围
$arr = array(
'AAAA',
'BBBB',
'CCCC'
);$str = "AAAA is good than CCCC";foreach($arr as $val){
if(false !== strpos($str,$val))
echo $val."<br />";}
$preg= "AAAA|BBBB|CCCC|DDDDD";$str = "AAAA is good than CCCC";if(preg_match_all("/$preg/i",$str,$m)){
print_r($m);
}
"AAAAA0",
"AAAAA1",
...
"AAAAA99"
)
$str = "这是中文这是中文这是中文这是中文这是中文这是中文这是中文
这是中文这是中文这是中文这是中文这是中文这是中文这是中文这是中文
this is english,this is english,this is english,this is english,this is english,this is english,
this is english,this is english,this is english,this is english,this is english,this is english,
this is english,this is english,this is english,this is english,this is english,this is english,
this is english,this is english,this is english,this is english,this is english,this is english,
!@#$%^&*()_+!@#$%^&*()_+!@#$%^&*()_+!@#$%^&*()_+!@#$%^&*()_+!@#$%^&*()_+!@#$%^&*()_+!@#$%^&*()_+
把数据往后放把数据往后放把数据往后放把数据往后放把数据往后放把数据往后放把数据往后放把数据往后放把数据往后放
AAAAAA0######################AAAAA95AAAAA96AAAAA97AAAAA98AAAAA99";
foreach($arr as $val){
if(false !== strpos($str,$val))
echo $val."<br />";}
//输出为:
AAAAA0
AAAAA9
AAAAA95
AAAAA96
AAAAA97
AAAAA98
AAAAA99
Total in 0.00027585029602051 seconds 你难度是我一百倍行不,也难出一秒范围
就是按需要过滤的字符串进行分组,再分组,比如 需要过滤的字符串是 AAB AAC BBA BBC分成这样:
$arr=array('A','B')
$arr1=array(
'A'=>array('AA'),'B'=>array('BB')
)
$arr2=array(
'AA'=>array('AAB','AAC'),'BB'=array('BBA','BBC')
)
然后把需要过滤的字符串拆字,,再到数组中去查找,是这样吗?
组织成
array(
'A' => array(
'A' => array(
'B' => array(),
'C' => array(),
),
),
'B' => array(
'B' => array(
'A' => array(),
'C' => array(),
),
),
)
沿关联键递归进入直至空数组,表示匹配
应该怎么进行分组呢?
class China{
function chinafen($strs){
$strs=trim($strs);
$dicfile=dirname(__FILE__)."/zhongwen.txt";
$file=fopen($dicfile,"r");
while($str=fgets($file)){
$arr[]=trim($str);
}
$match=array();
$str=<<<EOF
"$strs"
EOF;
for($i=0;$i<count($arr);$i++){
if(@strpos($str,$arr[$i])){
$match[]=$arr[$i];
}
}
fclose($file);
print_r($match);
return $match;
}
}
代码帖上来,请大家改进,我还是菜鸟,哪位大哥说的trie算法,有源码么,能不能共享一下。
eg:原句:"AUMARK"车侧标志,是一个温度传感器。
要从二十万条数据里面,把这俩个词,找出来,
("AUMARK"车侧标志),(温度传感器)。英文和标点符号也要留下。请大侠指教源码最好了。谢谢各位了。