请教一个正则表达式

csproj 2010-11-13 03:51:45
要求以下几种字符串匹配成功
aaaaaaaaaab
aaaaabbbbbb
aaabbbbbbbb
abbbbbbbbbb

以下情况就不成功
aaaaaaaaaba
aabbaaaaaaa


也就是由ab组成,长度固定,但是顺序不能乱。


...全文
229 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
-过客- 2010-11-14
  • 打赏
  • 举报
回复
全a或全b是否允许

//允许全a或全b
(a|(?!ba)b){10}[ab]
//不允许全a或全b
(?!a{11}|b{11})(a|(?!ba)b){10}[ab]
烈火蜓蜻 2010-11-14
  • 打赏
  • 举报
回复
只要匹配字符串就好

^a+b+$

然后另外判断长度就可以了
兔子-顾问 2010-11-14
  • 打赏
  • 举报
回复
(a+b+)+
这样?
csproj 2010-11-14
  • 打赏
  • 举报
回复
楼上标错了
aaaaaaabbbba
匹配红色部分,不应该受后面字符的影响
csproj 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 cj205 的回复:]
(?=a+b+)(?!a+b+a+)[ab]{11}
这个应该没问题了把
[/Quote]
也有一点不对
baaaaaaaabba 这个应该匹配红色部分的。
yilaozhuang 2010-11-14
  • 打赏
  • 举报
回复
路过学习一下哈哈
csproj 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 lxcnn 的回复:]
全a或全b是否允许


C# code
//允许全a或全b
(a|(?!ba)b){10}[ab]
//不允许全a或全b
(?!a{11}|b{11})(a|(?!ba)b){10}[ab]
[/Quote]

这下对了,厉害,呵呵!

to Linux7985,wuyazhe
匹配成功之后,代码判断长度也可以,只不过想看正则该怎么实现。
Mr-Jee 2010-11-13
  • 打赏
  • 举报
回复
(?=a+b+)(?!a+b+a+)[ab]{11}
这个应该没问题了把
Mr-Jee 2010-11-13
  • 打赏
  • 举报
回复
不好意思 这个也不对
Mr-Jee 2010-11-13
  • 打赏
  • 举报
回复
(?=a+b+[^a])[ab]{11}
csproj 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 cj205 的回复:]
(?=a+b+)[ab]{11}

lz的错误在于
baaaaaaaabbb
这样的你就匹配不了了
[/Quote]
恩 谢谢 我发现了
你这个和2楼一样。
aaaaaaaaaba 也能匹配成功,不能保证顺序
Mr-Jee 2010-11-13
  • 打赏
  • 举报
回复
(?=a+b+)[ab]{11}

lz的错误在于
baaaaaaaabbb
这样的你就匹配不了了
colorall 2010-11-13
  • 打赏
  • 举报
回复
输入abcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
也通过了
csproj 2010-11-13
  • 打赏
  • 举报
回复
一样,扩张到3个字符 也能保证循序
((?<![bc])a|(?<!c)b|c){4}
能提取出来下面红色部分
cabccbacccccbbcc
csproj 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 colorall 的回复:]
引用 10 楼 jiabiao113 的回复:
这下可以了
((?<!b)a|b){11}
还是不正确

其实你是不是要一个不定长的字符串的正排序校验
[/Quote]

从一段文字中取出符合下面条件的字符:
1、满足长度
2、满足顺序。a必须在b的前面

10楼的正则我试了,没发现错误啊
((?<!b)a|b) 保证顺序 {11} 保证长度
colorall 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jiabiao113 的回复:]
这下可以了
((?<!b)a|b){11}
[/Quote]还是不正确

其实你是不是要一个不定长的字符串的正排序校验
csproj 2010-11-13
  • 打赏
  • 举报
回复
这下可以了
((?<!b)a|b){11}
sxmny123 2010-11-13
  • 打赏
  • 举报
回复
^a(长度,)b(长度,)$

计算机爱好者群系列
计算机爱好者-C#/net 群 86594082

加群的好处 :当你有一些小问题的时候 去网上发贴 不能及时得到答案,在群里可以迅速得到答案.....能认

识一些志同道合的朋友......共同进步....... 欢迎大家进去切磋
csproj 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lxcnn 的回复:]
try...


C# code
^(?=a+b+$)[ab]{11}$
[/Quote]

是我题意没说清楚
aaaaaaaaaab是文本中的一部分,前后没有固定的字符。
有可能是aaaaaaaaaabcccc
甚至可能是aaaaaaaaaabbbbbbbb (这种情况之匹配前面固定的位数的字符)
csproj 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 peiyutao 的回复:]
用a+b+匹配完后,判断一下匹配结果的长度。
[/Quote]
谢谢,就解决问题来说,这是个好办法。

有没有只用正则,不用代码来解决的方法呢?
就当是做个练习题
加载更多回复(5)

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧