[問題] Atomic Group 的原理是什麼?

看板RegExp (正規表示式 Regular Expression)作者 (kikilala)時間3年前 (2021/11/15 12:50), 3年前編輯推噓2(208)
留言10則, 2人參與, 3年前最新討論串1/1
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://www.ptt.cc/bbs/RegExp/M.1636951819.A.EB0.html

11/15 14:45, 3年前 , 1F
這解釋蠻清楚的
11/15 14:45, 1F

11/15 14:49, 3年前 , 2F
簡單說就是group內一旦有match,|後面的都會同時被捨棄
11/15 14:49, 2F

11/15 14:49, 3年前 , 3F
不會再回頭嘗試其他選項了
11/15 14:49, 3F
謝謝microloft大大 而 (?<!{) 是 negative lookbehind [0-9]+ 是 正整數 (\.[0-9]+)? 是 有無小數點 (?!}) 是 negative lookahead 經典範例沒有 | (alternation) 為何加了 ?> (Atomic Group) 可以不匹配到 7 呢?

11/15 18:59, 3年前 , 4F
+ 的 greedy 性表示第一波進去吃到 70 後退出, 這時 "70"
11/15 18:59, 4F

11/15 19:00, 3年前 , 5F
被 atomic group 抓住了, 表示之後若失敗則不會退回其中
11/15 19:00, 5F

11/15 19:01, 3年前 , 6F
然後 (?!}) 失敗了, 所以退後, 因上述理由不會再試只取 7
11/15 19:01, 6F

11/15 19:01, 3年前 , 7F
的狀況, 因此就不會匹配到單 7 了 (被 atomic group 丟掉)
11/15 19:01, 7F

11/15 19:03, 3年前 , 8F
跟 alternation 的相似性在於 atomic group 裡有不只一種
11/15 19:03, 8F

11/15 19:04, 3年前 , 9F
取法, 然後當這一群匹配成力後就鎖住了不會去試別的
11/15 19:04, 9F

11/15 19:04, 3年前 , 10F
成功
11/15 19:04, 10F
謝謝LPH66大大 雖然自己還是一知半解, 但還是謝謝各位大大的指導. ※ 編輯: kikilalagirl (223.139.101.1 臺灣), 11/15/2021 19:44:12
文章代碼(AID): #1XaUSBwm (RegExp)
文章代碼(AID): #1XaUSBwm (RegExp)