作者kikilalagirl (kikilala)
看板RegExp
标题[问题] Atomic Group 的原理是什麽?
时间Mon Nov 15 12:50:16 2021
Atomic Group 的原理是什麽?
实在搞不懂, 想请教各位大大, 希望能指导一下. 谢谢.
下载 MSYS2 来练习 Regular Expression, 使用 grep.exe
https://www.msys2.org/
范例1:
https://i.imgur.com/BljXlDD.jpg
为什麽 big 与 biggest 互换, 匹配结果会不同?
范例2:
https://i.imgur.com/PwlOieo.jpg
为什麽 a(?>bc|b)c 会没有匹配到 abc 呢?
经典范例: 不匹配 { } 里面的数字
( 来源
http://hk.uwenku.com/question/p-vayxvzwu-bgp.html )
https://i.imgur.com/Lbmhwh4.jpg
为什麽加了 ?> (Atomic Group) 後, 就不会匹配到 7 了?
以上范例的指令放在
https://pastebin.com/e60Qt9eE
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.139.101.1 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/RegExp/M.1636951819.A.EB0.html
2F:→ microloft: 简单说就是group内一旦有match,|後面的都会同时被舍弃 11/15 14:49
3F:→ microloft: 不会再回头尝试其他选项了 11/15 14:49
谢谢microloft大大
而
(?<!{) 是 negative lookbehind
[0-9]+ 是 正整数
(\.[0-9]+)? 是 有无小数点
(?!}) 是 negative lookahead
经典范例没有 | (alternation)
为何加了 ?> (Atomic Group) 可以不匹配到 7 呢?
4F:推 LPH66: + 的 greedy 性表示第一波进去吃到 70 後退出, 这时 "70" 11/15 18:59
5F:→ LPH66: 被 atomic group 抓住了, 表示之後若失败则不会退回其中 11/15 19:00
6F:→ LPH66: 然後 (?!}) 失败了, 所以退後, 因上述理由不会再试只取 7 11/15 19:01
7F:→ LPH66: 的状况, 因此就不会匹配到单 7 了 (被 atomic group 丢掉) 11/15 19:01
8F:→ LPH66: 跟 alternation 的相似性在於 atomic group 里有不只一种 11/15 19:03
9F:→ LPH66: 取法, 然後当这一群匹配成力後就锁住了不会去试别的 11/15 19:04
10F:→ LPH66: 成功 11/15 19:04
谢谢LPH66大大
虽然自己还是一知半解,
但还是谢谢各位大大的指导.
※ 编辑: kikilalagirl (223.139.101.1 台湾), 11/15/2021 19:44:12