※ 引述《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