作者CindyLinz (Cindy Wang)
看板RegExp
標題Re: [問題]請問正規表示式如何抓取這樣的字串
時間Fri Nov 7 02:05:13 2014
※ 引述《erthe (uuuu)》之銘言:
: 小弟使用VBA or perl
: 目前的問題是 有字串如下
: A........B..........
: AA.......BB.........
: AAA......BBB.........
: 規則是字串A和字串B出現的次數一樣 請問要怎麼表達?
: 小弟試過 "A{}.+B{}" 就是不知道{}內次數要怎麼一樣
perl 可以這樣寫:
/(?<!A)A([^AB]*|A(?-1)B)B(?!B)/
最前面的 (?<!A) 是說這一串比對到的字串 的前面不能剛好是一個 A 字
最後面的 (?!B) 是說這一串比對到的字串 的後面不能剛好是一個 B 字
(放這兩個的目的也就是想避免找到像這樣的字串 (漏掉前面一個 A 不吃):
A
AABB
往內一點點, 頭吃一個 A, 尾吃一個 B.
中間的括號裡面分有兩個 branch:
[^AB]* 是一團沒有A也沒有B的東西若干(或0個)
A(?-1)B 是說 先1個A, 然後再走一次中間這一個括號, 然後再1個B
其中 (?-1) 指的是想要走從它的位置往前數, 遇到的第1個左括號的那一組.
也就是 ([^AB]*|A(?-1)B) 這一組
嗯, 我是假設你要的一串 A 和一串 B, 如果不是緊臨著的話,
之間不能出現任何的 A 或 B.
這個 pattern 會接受
AAABBB
KAAAACBBBB
會拒絕
AAABBBB
AAACBBBB
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.121.80.249
※ 文章網址: http://www.ptt.cc/bbs/RegExp/M.1415297116.A.8B5.html
※ 編輯: CindyLinz (112.121.80.249), 11/07/2014 02:18:42
推 lin1987www: 大大超強的!我本來嘗試?>去做不行...最後看懂大大答案 11/12 19:43
→ lin1987www: 可否請大大印出Debug的程序,我腦袋跑步出來結果 xd 11/12 20:14
→ CindyLinz: Debug 的程序是指...?? 11/12 23:15