求一个正则

匹配结尾为B的字符串,但是串里不能有 #\d

比如:

#4xBafBkk
匹配结果:afB

asB#4iBook
匹配结果:asB

是只匹配三位字符串吗

这条件写一个难度很大,资源代下载99dxz
首先是要求不匹配,然后再匹配,真不知道怎么写

兄弟帮我顶了一下,也算帮了个忙了

楼上的说我需求表达不清楚,我再补充一下
主要是后面这句话:“不能有 #\d”(#\d要连在一起),需要用到类似否定断言:(?!#\d),而不是[^#\d],匹配的字数数量也不限
再举几个例子:
#4xBafBkk         匹配结果:afB
aaaasB#4iBook       匹配结果:aaaasB
汉字B加数字的#1B          匹配结果:汉字B
符号#2B%2号B       匹配结果:%2号B

正则里肯定类的匹配是比较简单的,主要想学下“字符串(不是单个字符)的否定匹配”,谢谢了!

/(?<=^|B)((?!#\d)[^B])+B/g

或者是
/(?<=^|B)(?![^B]*#\d)[^B]+B/g

大神厉害呀!我试验了,能成功
我又追加了20分,能否再请教把这个表达式从逆向断言改成顺序断言?我是用VBS的,不像JS这样支持逆向断言。谢了

用VBS逆向断言改成顺序断言就要把最后的B作为顺序断言。这样匹配结果中就没有B了,需要自己加上。

Dim str, re, Match, Matches

str = "中文B#4xBafBx#a1B#4iBook"

Set re = New RegExp

re.Pattern = "(?:^|B)((?:(?!#\d)[^B])+)(?=B)"

re.Global = True

Set Matches = re.Execute(str)

For Each Match in Matches  

    msgbox Match.SubMatches(0)&"B"

Next

你可能感兴趣的:(求一个正则)