
我有一个文本文件 file.txt
内容是每行四个字符:
fdsa
vffd
csfe
zfvs
gfge
fdsk
dcfa
zdco
fdau
dpkl
fpyt
这样的结构,有几十万行。我想把他们分类,带 aeoiu 任一个字符或者多个元音字符的写在
one.txt 文件中,不带 aeoiu 中的任何一个字符放在文件 two.txt 中,代码写了好久,不会做啊,正则完全不懂.有高手指教下吧。又做了伸手党,可耻啊!!!
1 lxrmido 2016-01-05 20:27:18 +08:00 preg_match('/[aeoiu]/', $word); |
2 Zzzzzzzzz 2016-01-05 20:30:06 +08:00 用 strpbrk |
3 bdbai 2016-01-05 20:32:25 +08:00 via iPhone 正则表达式存文件好像挺难的,找个培训班老师问问吧。 |
4 liuhaotian 2016-01-05 20:34:54 +08:00 preg_match_all('/([aeiou]+)/',$word); foreach($word as $theword){ //output } preg_match_all('/(^[aeiou]+)/',$word); foreach($word as $theword){ //output } 好像是这样的吧 |
5 liuhaotian 2016-01-05 20:35:42 +08:00 错了。。 preg_match_all('/([aeiou]+)/',$word,$matches); foreach($matches as $theword){ //output } preg_match_all('/(^[aeiou]+)/',$word); foreach($matches as $theword){ //output } 好像是这样的吧 |
6 yumijie OP |
7 cnxh 2016-01-05 20:43:51 +08:00 via iPhone 是域名吗 |
10 jfcherng 2016-01-05 20:48:46 +08:00 $file = file_get_contents('file.txt', 'r'); $One= $two = []; $lines = explode("\n", $file); foreach ($lines as &$line) { if (preg_match('/[aeiou]/S', $line)) { // if (strpbrk($line, 'aeiou') !== false) { // if (strcspn($line, 'aeiou') < strlen($line)) { $one[] = &$line; } else { $two[] = &$line; } } $One= implode("\n", $one); $two = implode("\n", $two); file_put_contents('one.txt', $one); file_put_contents('two.txt', $two); |
11 ChiChou 2016-01-05 20:49:55 +08:00 grep '[aeiou]' file.txt > one.txt grep -v '[aeiou]' file.txt > two.txt |
15 jfcherng 2016-01-05 21:08:58 +08:00 |
16 movtoy 2016-01-05 21:17:33 +08:00 不会正则,笨办法。不知道能不能用 $fh = fopen('filename.txt', r) or die('errormsg'); while(! feof($fh)) { //判断是否文件末尾 $string = fgets($fh);//得到一行 //处理该行 for ($i=0; $i <strlen($string); $i++) { if (strpos('aeiouAEIOU',$string[$i]) === false) { # 写入 two.txt } else { # 写入 one.txt } } } fclose($fh); |
17 KentY 2016-01-05 21:48:38 +08:00 awk 很容易啊 awk '{print > (($0~/[aeiou])?"one":"two")".txt"}' file 没测试, 估计差不多. |
18 KentY 2016-01-05 21:49:15 +08:00 差个 /, : /[aeiou]/ |
20 elvba 2016-01-06 01:18:49 +08:00 array_map(function ($line) { file_put_contents(( strpbrk($line, 'aeiou') !== false ) ? 'one.txt' : 'two.txt', $line, FILE_APPEND); }, file('file.txt')); |
21 chaegumi 2016-01-06 07:49:31 +08:00 搞了几年的 php 了,我都不知道有这个函数: strpbrk |
25 yumijie OP 非常感谢楼上诸位,我就不一一 @ |
26 yumijie OP 楼上好几位的代码都能实现我想要的功能,我在查查手册,消化消化。 |
27 xiamingchong 2016-01-06 09:38:28 +08:00 其实不用 php ,两个命令就好了 awk '/[aeiou]+/ {print }' file.txt > one.txt awk '/^[^aeiou]+$/ {print }' file.txt > two.txt |
28 flydogs 2016-01-06 10:19:04 +08:00 直接用文本编辑器,正则规范 分别检索两次 不用写 php 程序把。 |
29 minongbang 2016-01-06 18:20:30 +08:00 |
30 yumijie OP @minongbang 哦我在网上找了好久没找到这样的工具. |
31 KIDJourney 2016-01-10 21:11:36 +08:00 |
32 yumijie OP @KIDJourney 可惜我看不懂 python PHP 我都只能看点皮毛 |