在 C# 中使用正则表达式匹配 a^n b^n c^n(例如“aaabbbccc”)
Posted
技术标签:
【中文标题】在 C# 中使用正则表达式匹配 a^n b^n c^n(例如“aaabbbccc”)【英文标题】:Matching a^n b^n c^n (for example “aaabbbccc”) using regular expressions in C# 【发布时间】:2015-04-23 21:17:21 【问题描述】:您可以轻松地使用正则表达式来验证常规语言。我的问题是你能用它来验证上下文相关的语言吗?层次结构中的现代正则表达式有多强大?
您将如何创建一个正则表达式来检查与 a^n b^n c^n 匹配的字符串?
以下情况应匹配:
abc
aabbcc
aaabbbccc
以下情况不应匹配:
abbc
aabbc
aabbbccc
【问题讨论】:
n 已知吗?还是任何数字,只要所有字母的数字都相同? @Robbert 听起来像后者 相关:Capturing Quantifiers and Quantifier Arithmetic 有什么意义?它不是正则语言,正则表达式是错误的工作工具。您也许可以通过使用非标准/荒谬的解决方案来强制它工作,但再次......有什么意义...... @JeffMercado:关键是要确定问题中写了什么,我想:“现代正则表达式在层次结构中有多强大?” 【参考方案1】:.NET 提供了balancing groups,您应该可以使用它来执行此操作;类似:
^(?<n>(?<o>a))*(?<-n>b)*(?<-o>c)*(?(n)(?!))(?(o)(?!))$
对于每个 a
,递增 n
和 o
,对于每个 b
递减 n
,然后对于每个 c
,递减 o
,然后如果任一计数器为仍然大于零。
【讨论】:
没想到竟然能做出这种事! @minitech - 恭喜声望达到 10 万!以上是关于在 C# 中使用正则表达式匹配 a^n b^n c^n(例如“aaabbbccc”)的主要内容,如果未能解决你的问题,请参考以下文章