把一份doc文件的单词文档直接打开,复制后粘贴到一个text文件想提取里面的单词到新文件。一直不成功。
内容如下
大学英语六级考试大纲词汇 A abbreviation n.节略,缩写,缩短 abide vt.遵守 vt.忍受 abolish vt.废除,取消 absent a.不在意的 absorption n.吸收;专注 abstract a.理论上的 n.抽象
并不难写出下面的形式,而且在各个正则在线测试的网站上也通过了,只要提取$1就可以了。
\s+([a-zA-Z]+)\s+([a-zA-Z]+\.)
![](https://img.haomeiwen.com/i2747346/10f15073b2ce37f9.png)
但是在用本地php提取的时候数组总是空的,找不到原因。怀疑本地环境的问题,所以找了个在线的php运行网站准备实验下,突然发现
![](https://img.haomeiwen.com/i2747346/e4f91f18f9b99432.png)
原来的空格变成了一系列的点,这些点是一个字符,鼠标单击能选中全部。也许在线正则测试环境对字符串做了处理,而自己没有处理,\s不能匹配这些点。所以手动的去替换了这些空格,然后重新观察规律发现没有那么复杂
用
\w+(?=\s+)
上述表示
![](https://img.haomeiwen.com/i2747346/dbf07ef21c1f96bd.png)
\w在.net环境下支持中文的,其他环境支不支持要自己去测试或者查看文档。
一个小细节没注意,下面循环里的item=[];必须保留,否则结果异常。
for ($i = 0;$i< count($questions); $i++) {
if (in_array($questions[$i]['partition_id'],$partitions)){
for ($j = 0;$j < count($contents);$j++){
if ($contents[$j]['partition_id'] == $questions[$i]['partition_id']){
echo $i ."---". $j;
unset($questions[$i]['content']);
$contents[$j]['list'][] = $questions[$i];
break;
}
}
}else{
$item = [];
$item['content'] = $questions[$i]['content'];
$item['partition_id'] = $questions[$i]['partition_id'];
unset($questions[$i]['content']);
$item['list'][] = $questions[$i];
$partitions[] = $questions[$i]['partition_id'];
$contents[] = $item;
}
}
网友评论