新手问题 让人困惑的正则表达式

hellomac · 2017年06月26日 · 最后由 hellomac 回复于 2017年06月27日 · 1404 次阅读
"012\nABC".match /\AABC/
=> nil
 "012\nABC".match? /\AABC/
=> false
'B'.match /A*/
=> #<MatchData "">  这里为啥返回的是空字符串,而不是nil?
'B'.match? /A*/
=> #true 这里为啥返回了true,而不是false?明明没能匹配到呀~

感觉有点反直觉,是哪里理解错了?

:表示 0 次或多次,'B'.match /A/就匹配到空字符串了。'B'.match /A+/ 才是你想要的结果。

liukun_lk 回复

还是没懂 😢 为啥说是匹配到 空字符串 ,而不是 没匹配到返回 nil ?

hellomac 回复

*表示 0 以上,0 个 A 不就是空串么?

hellomac 回复

A* 表示 0 个或者多个 A 这里可以认为是匹配到了 0 个 A。

12 年注册的老号,还在问新手问题,可怜。

可以去rubular实时试试

sefier 回复

不要这样嘲讽,心疼。。

sefier 回复

其实没必要这种语气,谁知道他这几年发生了什么事,也许是从新开始学习呢,或者以前很少用正则呢,或者就是在正则上脑子转不过弯呢?

你给他一个文档链接也好过回一句无意义的嘲讽。

对于 * 来说,匹配到空也是一种匹配成功,所以不是 nil 而是空字符串。

sefier 回复

按照你这个思路,你 13 年就注册了账号,现在应该可以参加 rubyconf 大会技术分享了,今年杭州的主讲人名单应该有你了

https://regexper.com 用这个试试 很直观

@chenge @tesla_lee @rocLv @marksloan @kooglezhang @chromer 确实一时脑抽卡住了,读了半天文档愣没转过弯来.正则用的少,让大家见笑了.

@ForrestDouble @Peter 感谢理解.

@sefier 癌症群侃侃而谈俨然一副名医派头,结果求职的时候自我估值 4K 工资都达不到,既不懂 Ruby 服务器,又搞不定 PHP 框架版本的名校毕业生,谁给你的勇气四处嘲讽的?话说被多个论坛送了禁言套餐的高大上人士何不回到出租房里吹吹电扇降降温?

hellomac 关闭了讨论 06月27日 15:34
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册