看板 RegExp 關於我們 聯絡資訊
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
microloft: https://i.imgur.com/fOnMZyq.png 這解釋蠻清楚的 11/15 14:45
microloft: 簡單說就是group內一旦有match,|後面的都會同時被捨棄 11/15 14:49
microloft: 不會再回頭嘗試其他選項了 11/15 14:49
謝謝microloft大大 而 (?<!{) 是 negative lookbehind [0-9]+ 是 正整數 (\.[0-9]+)? 是 有無小數點 (?!}) 是 negative lookahead 經典範例沒有 | (alternation) 為何加了 ?> (Atomic Group) 可以不匹配到 7 呢?
LPH66: + 的 greedy 性表示第一波進去吃到 70 後退出, 這時 "70" 11/15 18:59
LPH66: 被 atomic group 抓住了, 表示之後若失敗則不會退回其中 11/15 19:00
LPH66: 然後 (?!}) 失敗了, 所以退後, 因上述理由不會再試只取 7 11/15 19:01
LPH66: 的狀況, 因此就不會匹配到單 7 了 (被 atomic group 丟掉) 11/15 19:01
LPH66: 跟 alternation 的相似性在於 atomic group 裡有不只一種 11/15 19:03
LPH66: 取法, 然後當這一群匹配成力後就鎖住了不會去試別的 11/15 19:04
LPH66: 成功 11/15 19:04
謝謝LPH66大大 雖然自己還是一知半解, 但還是謝謝各位大大的指導. ※ 編輯: kikilalagirl (223.139.101.1 臺灣), 11/15/2021 19:44:12