C# 带条件重复的正则表达式
我有以下正则表达式:C# 带条件重复的正则表达式,c#,.net,regex,C#,.net,Regex,我有以下正则表达式: ^((_[a-zA-Z0-9]|[a-zA-Z])+((?<bracket>\[)[0-9]+(?<-bracket>\])(?(bracket)(?!)))?)$ 但我想知道是否有更好的方法,不必复制初始部分 背景: 我需要访问一台使用基于标签寻址的机器Micrologix 5000。在C#应用程序中,我想验证用户输入的地址是否正确 允许的: Dog.Tail Dogs[0]。Tail.IsMoving 不允许: 狗。 狗[0]。 您可以使
^((_[a-zA-Z0-9]|[a-zA-Z])+((?<bracket>\[)[0-9]+(?<-bracket>\])(?(bracket)(?!)))?)$
但我想知道是否有更好的方法,不必复制初始部分
背景:
我需要访问一台使用基于标签寻址的机器Micrologix 5000。在C#应用程序中,我想验证用户输入的地址是否正确
允许的:
Dog.Tail
Dogs[0]。Tail.IsMoving
狗。
狗[0]。
- 您可以使用递归。见此:
^((_[a-zA-Z0-9]|[a-zA-Z])+((?<bracket>\[)[0-9]+(?<-bracket>\])(?(bracket)(?!)))?)(\.\1)*$
^^
([a-zA-Z0-9]|[a-zA-Z])+((?\[)[0-9]+(?\])(?(括号)(?!))(\.\1)*$
^^
递归第一个捕获组中的第一个子模式\1
()
然而,这比您尝试的正则表达式效率低两步,对于这种情况,正则表达式是最佳的。这里可以使用递归来提高其可读性,但这不是推荐的做法。为什么使用\.\1反向引用组递归是解决方案,但我必须在我的案例中使用\1而不是?1它适用于基本测试案例,但不使用实际案例\1用于重复相同的捕获,但我需要重复相同的模式,因此解决方案是(?R),这在.Net中不受支持。
^((_[a-zA-Z0-9]|[a-zA-Z])+((?<bracket>\[)[0-9]+(?<-bracket>\])(?(bracket)(?!)))?)(\.\1)*$
^^