亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 正則匹配目錄問題求教? [打印本頁]

作者: 大司南    時間: 2008-04-08 15:48
標題: 正則匹配目錄問題求教?
比如 一個文件中的信息如下:
/aaa/bbb/ccc.txt
/ddd/ccc/ddd/eee/txt
/dd/sdf/ees.ttl
/eee/ccc/sss.txt
/aaa/bbb.ext
/ccc/mmm.ett
...


如何來統(tǒng)計這個文件里面的二級文件夾和一級文件夾(用正則表達式)?
如二級文件夾 /dd/sdf/ees.ttl
作者: hitsubunnu    時間: 2008-04-08 15:54
  1. if($aa =~ /\/.+\/.+\/.+\..+/){
  2.         print "2\n";
  3. }else{
  4.         print "1\n";
  5. }
復制代碼

[ 本帖最后由 hitsubunnu 于 2008-4-8 16:01 編輯 ]
作者: 大司南    時間: 2008-04-08 16:04
.+應該是匹配任意非空字符吧,你這個好像不起作用。。。。
作者: hitsubunnu    時間: 2008-04-08 16:07
3級的也要嗎?
作者: 大司南    時間: 2008-04-08 16:11
.+應該也匹配'/'吧。。。
我寫的是 $aa =! m|^\/\w+\/\w+\w+|
可是這個不行,想不通
作者: 大司南    時間: 2008-04-08 16:12
另外二級文件夾后面的文件可能沒有后綴
比如:
/a/b/c
作者: ly5066113    時間: 2008-04-08 16:14
原帖由 大司南 于 2008-4-8 16:11 發(fā)表
.+應該也匹配'/'吧。。。
我寫的是 $aa =! m|^\/\w+\/\w+\w+|
可是這個不行,想不通


這個意思?
m|(/\w+){3}|
作者: 大司南    時間: 2008-04-08 16:19
是的,我的意思是要求只匹配二級文件夾和一級文件夾,是不是這樣可以
$aa =~ m|(\/w+){3} && $aa =~ m|\/{3}
感覺有點暈。。。。
作者: hitsubunnu    時間: 2008-04-08 16:20
原帖由 大司南 于 2008-4-8 16:19 發(fā)表
是的,我的意思是要求只匹配二級文件夾和一級文件夾,是不是這樣可以
$aa =~ m|(\/w+){3} && $aa =~ m|\/{3}
感覺有點暈。。。。

  1. open(FF,"1.txt");
  2. while(<FF>){

  3. if(/(\/\w+){3}\/\w+\.\w+/){
  4.         print "3-$_\n";
  5. }elsif(/(\/\w+){2}\/.+\.\w.+/){
  6.         print "2-$_\n";
  7. }elsif(/(\/\w+){1}\/.+\.\w+/){
  8.         print "1-$_\n";
  9. }else{
  10.         print "no-$_\n";
  11. }

  12. }
  13. close(FF);
復制代碼

作者: 大司南    時間: 2008-04-08 16:22
哦,有沒有別的方法?
作者: apile    時間: 2008-04-08 16:24
用split("/")..再去算array的大小...
作者: 大司南    時間: 2008-04-08 16:28
apile,這個用正則怎么來寫,能不能賜教
作者: ly5066113    時間: 2008-04-08 16:30
原帖由 大司南 于 2008-4-8 16:28 發(fā)表
apile,這個用正則怎么來寫,能不能賜教


perl -F/ -anle 'print if $#F <= 3' file
作者: 大司南    時間: 2008-04-08 16:34
假如我最后一個字段含有類似http://aaaa.bbbb.cccc
如下:
/a/b/c?url=http://aaaa.bbbb.cccc
這樣的怎么處理。。。還請賜教
作者: apile    時間: 2008-04-08 16:34
原帖由 大司南 于 2008-4-8 16:28 發(fā)表
apile,這個用正則怎么來寫,能不能賜教

不是已經跟你說了..
跟樓樓上寫的..差不多..他的是精簡版...

  1. my @tmp = split("/",$line);
  2. if(@tmp == 3) #level 2
  3. {
  4.    #do
  5. }elsif(@tmp==4){
  6. #level 3
  7. }
復制代碼

作者: 大司南    時間: 2008-04-08 16:36
原帖由 大司南 于 2008-4-8 16:34 發(fā)表
假如我最后一個字段含有類似http://aaaa.bbbb.cccc
如下:
/a/b/c?url=http://aaaa.bbbb.cccc
這樣的怎么處理。。。還請賜教


??
作者: hitsubunnu    時間: 2008-04-08 16:37
原帖由 apile 于 2008-4-8 16:34 發(fā)表

不是已經跟你說了..
跟樓樓上寫的..差不多..他的是精簡版...

my @tmp = split("/",$line);
if(@tmp == 3) #level 2
{
   #do
}elsif(@tmp==4){
#level 3
}

我覺得他需要的是

Learning Perl
作者: apile    時間: 2008-04-08 16:38
原帖由 大司南 于 2008-4-8 16:36 發(fā)表


??

在split前先把 ?前面的過濾出來...
$line = s/\?.*$//;
其他的自己解決.....
作者: 大司南    時間: 2008-04-08 16:39
OK,謝謝各位




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2