在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 18463|回复: 9

[求助] 关于perl 空白行 匹配的 正则表达式

[复制链接]
发表于 2013-6-2 16:02:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
/^\s*$/ 可以用来匹配空白行。
假设 $_="aaa";
问题是:/\s*/ 可以匹配成功,  为什么/^\s*$/  加了首位锚位后就不能匹配了$_首位不都是有0个\s么?
发表于 2013-6-3 13:12:16 | 显示全部楼层
回复 1# ic_seu


    /^\s*$/  
表示的意思是行首与行尾之间“有任意多个空白字符”(但不含任何非空白字符)。
显然你的$_含有非空白字符。
你写成/^\s*/或者 /\s*$/都可以匹配到$_
发表于 2013-6-3 13:54:51 | 显示全部楼层
回复 1# ic_seu


    二楼版主正解
 楼主| 发表于 2013-6-5 14:51:55 | 显示全部楼层
回复 2# sjtusonic


    谢谢版主。
“    /^\s*$/行首与行尾之间“有任意多个空白字符”(但不含任何非空白字符)  ”这是perl的约定么?


    比如,
/^\s*/ 能匹配$_=“aaa”, 是因为$_有0个空白符,所以被匹配的么?
发表于 2013-6-6 10:14:10 | 显示全部楼层
回复 4# ic_seu


      如果在字符串的当前位置上发现一个完全匹配,那么正则表达式宣布成功。如果正则表达式的所有可能路径都尝试过了,但是没有成功地匹配,那么正则表达式引擎回到第二步,从字符串的下一个字符重新尝试。只有字符串中的每个字符(以及最后一个字符后面的位置)都经历了这样的过程之后,还没有成功匹配,那么正则表达式就宣布彻底失败。
      牢记这一过程将有助于您明智地判别那些影响正则表达式性能问题的类型。


    you see see:
http://www.jb51.net/article/19332.htm
发表于 2013-6-6 10:22:26 | 显示全部楼层
看来你还没有理解二楼的意思

我们再把表达式拆开  /^\s*$/  
^匹配行首      \s*匹配0个或多个空白    $匹配行尾
所以这个表达式既匹配了行首又匹配了行尾,之间只有空白字符

/^\s*/可以匹配开头有(无)空白的字符串    /\s*$/可以匹配结尾有(无)空白的字符串
你的问题在于把匹配开头和结尾的^和$都加上了,所以/^\s*$/ 只能匹配一个空行了

这是你表达式匹配下来的结果,非perl的约定
看perl正则表达式要一个一个字符看全了,仔细分析,少看一个结果都不一样
 楼主| 发表于 2013-6-7 09:45:28 | 显示全部楼层
回复 6# 射门靴


   谢谢。
  我想我主要是理解错:“ 我以为 /^b$/ 可以匹配比如 $_="b a b" 这类”。

   我是不是可以理解为,加了^$ 后,=~ 两侧的长度要相同 是匹配成功的必要条件。
 楼主| 发表于 2013-6-7 09:47:17 | 显示全部楼层
回复 5# sjtusonic


   谢谢。
   确实应该了解下,引擎是如何运行帮助理解。
发表于 2017-1-24 15:11:22 | 显示全部楼层
perl对IC设计者很有帮助
发表于 2017-7-21 14:44:26 | 显示全部楼层
/\A\s*\z/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-18 08:30 , Processed in 0.026797 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表