今天遇到的两个坑

把一份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]+\.)
今天遇到的两个坑_第1张图片
image.png

但是在用本地php提取的时候数组总是空的,找不到原因。怀疑本地环境的问题,所以找了个在线的php运行网站准备实验下,突然发现


image.png

原来的空格变成了一系列的点,这些点是一个字符,鼠标单击能选中全部。也许在线正则测试环境对字符串做了处理,而自己没有处理,\s不能匹配这些点。所以手动的去替换了这些空格,然后重新观察规律发现没有那么复杂

\w+(?=\s+)

上述表示


image.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;
            }
        }

你可能感兴趣的:(今天遇到的两个坑)