Re: [問題]請問正規表示式如何抓取這樣的字串

作者: CindyLinz (Cindy Wang)   2014-11-07 02:05:13
※ 引述《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 不吃):
AAABB
往內一點點, 頭吃一個 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
作者: CindyLinz (Cindy Wang)   2014-11-07 02:06:00
作者: lin1987www (林奕忠)   2014-11-12 19:43:00
大大超強的!我本來嘗試?>去做不行...最後看懂大大答案可否請大大印出Debug的程序,我腦袋跑步出來結果 xd
作者: CindyLinz (Cindy Wang)   2014-11-12 23:15:00
Debug 的程序是指...??
作者: lin1987www (林奕忠)   2014-11-20 11:05:00

Links booklink

Contact Us: admin [ a t ] ucptt.com