免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6095 | 回复: 17
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-23 18:02 |只看该作者 |倒序浏览
标量是一个多行的字符串.现在想匹配到 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-"';

论坛徽章:
0
2 [报告]
发表于 2009-09-23 18:12 |只看该作者

回复 #1 litaosmile 的帖子

增加一修饰词
$aa=~ m/.../sm

论坛徽章:
0
3 [报告]
发表于 2009-09-23 18:40 |只看该作者
if ($array[100]=~m/ServerAdmin\s+(\w+\d*\@staff\.sina\.com\.cn).*?(SetEnv.*SINASRV.*DB.*NAME\s+)($dbname$)/ms)
大哥这样还是不行!

论坛徽章:
0
4 [报告]
发表于 2009-09-23 18:40 |只看该作者
先找一个 然后再找到一个的情况下再去找另一个.可以解决.那样需要匹配两次.想知道用一个正则怎么匹配.

论坛徽章:
0
5 [报告]
发表于 2009-09-23 18:47 |只看该作者
看了半天,终于有点明白lz的意思了,lz是说对于文件的一行一行匹配没问题,但是 $aa 中的内容,没法按行读取了,如何找出一个邮箱和数据库名?是这个理解的话:
对于/m只能在一定程度上解决多行匹配的问题,必须^ /$结合使用,不怎么推荐,split 转化为自己会的方式,不更好?

my @aa = split("\n", $aa); #注意你的文本是 /r/n 还是  /n
foreach (@aa) {
   if ($str =~/xxx/) {
      print "xxx\n";
   }
}

论坛徽章:
0
6 [报告]
发表于 2009-09-23 19:05 |只看该作者
我也试了一下,好像匹配没有发生。
不知道咋回事了?

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

恩 这个方法不错!谢谢了

论坛徽章:
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
8 [报告]
发表于 2009-09-24 10:04 |只看该作者

回复 #1 litaosmile 的帖子

$aa里面没有staff啊,如何匹配?

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

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

论坛徽章:
0
10 [报告]
发表于 2009-09-24 13:26 |只看该作者
原帖由 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。

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

这个只是其中一个,还有很多类似于SINASRV_DB_NAME样子的 ,比如SINASRV_DB2_NAME等
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP