LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1997|回复: 2

急!求救一个perl多行正则匹配问题

[复制链接]
发表于 2009-9-23 18:00:54 | 显示全部楼层 |阅读模式
标量是一个多行的字符串.现在想匹配到 haha@163.com.cn
和SetEnv SINASRV_DB_NAME searchbetav 里面的这个数据库的名字:searchbetav
(把这些放入一个文件中一行行匹配我会,这里要希望从一个标量匹配)
我写的匹配:
my $dbname='searchbetav';
if ($aa=~m/ServerAdmin\s+(\w+\d*\@staff\.sina\.com\.cn).*?(SetEnv.*SINASRV.*DB.*NAME\s+)($dbname$)/s)
{
  print "$1*\n";
  print "$2**\n";
  print "$3***\n";
  print "$4====\n";
}
各位高手给看看有上面问题 ,怎么才能把两个匹配上.

$aa='ServerName search.beta.v.sina.com.cn                  
    ServerAlias search.video.sina.com.cn                  

        ServerAdmin haha@163.com.cn
        DocumentRoot /data1/www/htdocs/search.beta.v.sina.com.cn/
        ErrorLog /data1/www/logs/search.video.sina.com.cn-error_log
        CustomLog /data1/www/logs/search.video.sina.com.cn-access_log
                                                                     
        SetEnv SINASRV_DATA_DIR "/data1/www/data/search.beta.v.sina.com.cn/"
        SetEnv SINASRV_CACHE_DIR "/data1/www/cache/search.beta.v.sina.com.cn/"
        SetEnv SINASRV_PRIVDATA_DIR "/data1/www/privdata/search.beta.v.sina.com.cn/"
        SetEnv SINASRV_APPLOGS_DIR "/data1/www/applogs/search.beta.v.sina.com.cn/"  
                                                                                    
        SetEnv SINASRV_DATA_URL "http://search.beta.v.sina.com.cn/data"            
        SetEnv SINASRV_CACHE_URL "http://search.beta.v.sina.com.cn/cache"           

        #SetEnv SINASRV_NDATA_DIR "/datanfs1/sinasrv/www/ndata/search.beta.v.sina.com.cn/"
    SetEnv SINASRV_NDATA_CACHE_URL "http://cache.mars.sina.com.cn/nd/searchbetav/"        
                                                                                          
    SetEnv SINASRV_DB_HOST m3380i.mars.grid.sina.com.cn                                   
    SetEnv SINASRV_DB_HOST_R s3380i.mars.grid.sina.com.cn                                 
        SetEnv SINASRV_DB_PORT 3380                                                      
        SetEnv SINASRV_DB_NAME searchbetav                                                
        SetEnv SINASRV_DB_USER searchbetav                                                
        SetEnv SINASRV_DB_PASS 1wSeH45tGc                                                
        SetEnv SINASRV_DB_PORT_R 3380
        SetEnv SINASRV_DB_NAME_R searchbetav
        SetEnv SINASRV_DB_USER_R searchbetav_r
        SetEnv SINASRV_DB_PASS_R T5Gbv3edC45f

        SetEnv SINASRV_MEMCACHED_KEY_PREFIX "search_beta_v-"';
 楼主| 发表于 2009-9-23 18:32:11 | 显示全部楼层
先找一个 然后再找到一个的情况下再去找另一个.可以解决.那样需要匹配两次.想知道用一个正则怎么匹配.
回复 支持 反对

使用道具 举报

发表于 2009-9-26 12:15:00 | 显示全部楼层
问题关键是 \n,
如,下面的匹配
$aa =~ /ServerAdmin\s+([^\n]*)\n.*SetEnv\s+SINASRV_DB_NAME\s+($dbname)/s;
和结果为:

$1 = haha@163.com.cn
$2 = searchbetav
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表