作者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/m.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