免费注册 查看新帖 |

Chinaunix

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

/s模式下回车可以用\s匹配 [复制链接]

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-04-12 11:31 |只看该作者 |倒序浏览
本帖最后由 yakczh_cu 于 2016-04-12 19:00 编辑

这是摘自文档的
\s       Match a whitespace character
s

    Treat string as single line. That is, change "." to match any character whatsoever, even a newline, which normally it would not match.

只说了. 可以匹配到回车

  1. $text=<<"TEXT";


  2. 1
  3. X
  4. Y
  5. Z
  6. 2
  7. TEXT



  8. print [        DISCUZ_CODE_0        ] if $text =~ /X\sY/s;

复制代码
同样的正则和文本,用php测试一下 就匹配不到

  1. <?Php
  2. $text=<<<"T"


  3. 1
  4. X
  5. Y
  6. Z

  7. T;


  8. #print $text;


  9. preg_match("/Y\sZ/s",$text,$match);

  10. print_r($match);





复制代码
这算是perl特有的用法吗?

论坛徽章:
0
2 [报告]
发表于 2016-04-12 12:49 |只看该作者
你理解错了吧?
Treat string as single line. That is, change "." to match any character whatsoever, even a newline, which normally it would not match.
测试代码应该:
$text =~ /X.Y/s;
或者
$text =~ /X.*Y/s;

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
3 [报告]
发表于 2016-04-12 13:54 |只看该作者
本帖最后由 yakczh_cu 于 2016-04-12 13:58 编辑

回复 2# hztj2005

. 匹配\n 是文档上说的, 我问的问题是代码里 为什么\s 能匹配到 \n了



  1. $text=<<'TEXT';


  2. 1
  3. X
  4. Y
  5. Z
  6. 2
  7. TEXT


  8. # %04b
  9. print join ' | ', map { sprintf "%02X", ord } (split //, $text);


复制代码
0A | 0A | 31 | 0A | 58 | 0A | 59 | 0A | 5A | 0A | 32 | 0A   

/s 模式按一行字符串的话 XY中间应该是回车符

   

论坛徽章:
0
4 [报告]
发表于 2016-04-12 15:27 |只看该作者
本帖最后由 hztj2005 于 2016-04-12 15:28 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my $text=<<"TEXT";


  5. 1
  6. X
  7. Y
  8. Z
  9. 2
  10. TEXT

  11. #print $text;

  12. print "ok!\n" if $text =~ /X\sY/;


复制代码
不用/s这个代码输出的也是ok!,用/s也是ok!
我查了《Mastering regular experssions》47页:
Generic "whitespace" with \s
This includes(among others) space, tab, newline, and carriage return.

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
5 [报告]
发表于 2016-04-12 15:45 |只看该作者
本帖最后由 sunzhiguolu 于 2016-04-12 15:51 编辑

@yakczh_cu
你把 /s 模式张冠李戴了.

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
6 [报告]
发表于 2016-04-12 16:02 |只看该作者
回复 3# yakczh_cu
就像  4楼 大神 说的那样, /s 模式 与 \s 之间半毛钱关系都没有.


   
sinian126 该用户已被删除
7 [报告]
发表于 2016-04-13 14:01 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
8 [报告]
发表于 2016-04-13 14:53 |只看该作者
回复 7# sinian126
Generic "whitespace" with \s
This includes(among others) space, tab, newline, and carriage return.
老大, \s 匹配的是 whitespace <=> 空白, 其中包括 空格, 水平制表符, 回车键, 换行符.

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP