Chinaunix

标题: perl的正则匹配算法是深度优先? [打印本页]

作者: Pro_sky    时间: 2009-07-24 16:53
标题: perl的正则匹配算法是深度优先?

  1. #!/usr/bin/perl
  2. my $str = "VALUE 1 1
  3. aaa
  4. bbb
  5. END
  6. ";

  7. if($str =~ /^VALUE \d+ \d+[.\r\n]*END\r\n/g) {
  8.      print "OK\n";
  9. }
  10. else {
  11.     print "failed\n"
  12. }
复制代码


输出failed,怎么回事呢?是不是[.\r\n]*把后面的END都匹配进去了,有什么方法让这个匹配成功吗?谢谢了
作者: Perl_Er    时间: 2009-07-24 16:53
标题: 回复 #1 Pro_sky 的帖子
在末尾加s试试 /s
改了一下

  1. #!/usr/bin/perl
  2. my $str = "VALUE 1 1
  3. aaa
  4. bbb
  5. END
  6. ";

  7. if($str =~ /^VALUE \d+ \d+[\r\n].*END[\r\n]/s) {
  8.      print "OK\n";
  9. }
  10. else {
  11.     print "failed\n"
  12. }
复制代码

[ 本帖最后由 Perl_Er 于 2009-7-24 17:15 编辑 ]
作者: Pro_sky    时间: 2009-07-24 17:06
标题: 回复 #2 Perl_Er 的帖子
不行啊
作者: Pro_sky    时间: 2009-07-24 17:16
标题: 回复 #2 Perl_Er 的帖子
嗯,牛比,可以了!谢谢哈
作者: iceberg77    时间: 2009-07-24 17:27
标题: 回复 #1 Pro_sky 的帖子
[.\r\n]只是表示".","\r","\n"三个字符的集合
作者: blackold    时间: 2009-07-24 18:11
学习学习!
作者: qshllxfx    时间: 2009-07-24 18:35
为什么 . 和 \r\n 放在一起就不行呢?
作者: blackold    时间: 2009-07-24 18:52
标题: 回复 #7 qshllxfx 的帖子
不是.的问题,是s的问题。
作者: qshllxfx    时间: 2009-07-24 20:16
明白了,[]里的.和[]外的.是不一样的,呵呵
作者: maklive8    时间: 2009-07-27 21:45
标题: 回复 #1 Pro_sky 的帖子
谁知道\r和\n的区别?
作者: MMMIX    时间: 2009-07-27 22:16
原帖由 maklive8 于 2009-7-27 21:45 发表
谁知道\r和\n的区别?

在 perlre 中查之。
作者: maklive8    时间: 2009-07-28 11:32
标题: 回复 #11 MMMIX 的帖子
谢谢。
/r是return
/n是newline
但是return和newline有什么不同呢?
作者: MMMIX    时间: 2009-07-28 12:57
原帖由 maklive8 于 2009-7-28 11:32 发表
谢谢。
/r是return
/n是newline
但是return和newline有什么不同呢?

不是同一个字符撒,而且 \n 在某些 OS 上还可能是两个字符。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2