免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: litaosmile
打印 上一主题 下一主题

急!求救一个perl多行正则匹配问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-09-24 13:27 |只看该作者
原帖由 blackold 于 2009-9-24 10:04 发表
$aa里面没有staff啊,如何匹配?

由于某些原因我把邮件换了下,sorry

论坛徽章:
0
12 [报告]
发表于 2009-09-24 13:34 |只看该作者
原帖由 dahe_1984 于 2009-9-24 11:09 发表
if ($aa=~m/^ServerAdmin.*?\s([\w]+\@163\.com\.cn).*?(SetEnv.*)?($dbname)/mgs)
不知道你中间(SetEnv.*SINASRV.*DB.*NAME\s+)想匹配什么?

应该加上m,/s只能让.匹配\n。



你这个貌似也匹配不到~~

论坛徽章:
0
13 [报告]
发表于 2009-09-24 13:37 |只看该作者
原帖由 dugu072 于 2009-9-23 18:47 发表
看了半天,终于有点明白lz的意思了,lz是说对于文件的一行一行匹配没问题,但是 $aa 中的内容,没法按行读取了,如何找出一个邮箱和数据库名?是这个理解的话:
对于/m只能在一定程度上解决多行匹配的问题,必 ...

因为我之前取出这个$aa也是由for 循环取的,现在又加一个循环(其实$aa也不只这几行),效率应该不高,
其实只要找个方法回溯就能很好解决我的问题.

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
14 [报告]
发表于 2009-09-24 15:39 |只看该作者
可以匹配的。

论坛徽章:
0
15 [报告]
发表于 2009-09-24 17:49 |只看该作者

回复 #14 blackold 的帖子

帮忙写个出来 黑哥

论坛徽章:
0
16 [报告]
发表于 2009-09-24 17:58 |只看该作者
这个是你想要的还是你想匹配出所有的SINASRV[\_|w]+    ?

#!/usr/bin/perl

use strict;

my $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-"';

my $dbname='searchbetav';
if ($aa=~m/^ServerAdmin.*?\s([\w]+\@163\.com\.cn).*?(SINASRV[\_|\w]+)\s.*?($dbname)$/ms)
{
print "$1*\n";
print "$2**\n";
print "$3***\n";
print "$4====\n";
}

论坛徽章:
0
17 [报告]
发表于 2009-09-24 20:50 |只看该作者
好长好复杂啊

论坛徽章:
0
18 [报告]
发表于 2009-09-26 12:13 |只看该作者
问题关键是 \n,
如,下面的匹配
$aa =~ /ServerAdmin\s+([^\n]*)\n.*SetEnv\s+SINASRV_DB_NAME\s+($dbname)/s;
和结果为:

$1 = haha@163.com.cn
$2 = searchbetav
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP