在C#中使用正则表达式匹配a^n b^n c^n(例如“aaabbbccc”)。

12

你可以轻松使用正则表达式验证一个正则语言。我的问题是,你能否使用它来验证上下文相关的语言?现代正则表达式在这个等级体系中有多大的威力?

你将如何创建一个正则表达式来检查匹配a^n b^n c^n字符串?

以下情况应该匹配:

abc
aabbcc
aaabbbccc
以下情况不应匹配:
abbc
aabbc
aabbbccc

1
n是已知的吗?还是只要所有字母的数字相同就可以了? - Robbert
@Robbert 听起来像是后者。 - RaGe
有什么意义呢?这不是一种常规语言,正则表达式不是适合这项工作的正确工具。你可以通过使用非标准/荒谬的解决方案来强制它工作,但再次......这有什么意义呢...... - Jeff Mercado
1
@JeffMercado:我想关键是要确定问题中写了什么:“现代正则表达式在层次结构中有多强大?” - Ry-
@minitech 是的,我知道。实际上,我们甚至可以使用现代引擎来(正确地)解析HTML,但它仍然不是这种任务的正确工具。 - Jeff Mercado
1个回答

13

.NET提供了平衡组,您可以使用它来完成这个任务;大致如下:

^(?<n>(?<o>a))*(?<-n>b)*(?<-o>c)*(?(n)(?!))(?(o)(?!))$

增加no的值,对于每个a,减少n的值,对于每个bc,减少no的值,然后如果任一计数器仍大于零,则匹配失败((?!))。


我没想到做这样的事情是可能的! - Matthew
@minitech - 恭喜你达到10万声望! - Kobi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接