C# 正则表达式检查所有元素之间是否有拆分符
我有一个正则表达式,我试图用它来检测某个输入是否有效。输入的语法应该是C# 正则表达式检查所有元素之间是否有拆分符,c#,.net,regex,C#,.net,Regex,我有一个正则表达式,我试图用它来检测某个输入是否有效。输入的语法应该是{A | B | C}{A | B |}应该失败 (?: ( \{{1} (?:[A-Z0-1-_.*]+ \| [A-Z0-1-_.*]+)* \}{1} ) ) 这就是我目前所拥有的,但我开始认为这不是我要走的路。即使它工作正常,它也不允许应该有效的{A} 所以基本上我要做的是检查每个[A-Z0-1-.*]元素是否被|分割,并且{}括号内没有空元素 有一个概念让我觉得很有意义,那就是有n个可能的元素。比如
{A | B | C}
<代码>{A | B |}应该失败
(?:
(
\{{1}
(?:[A-Z0-1-_.*]+ \| [A-Z0-1-_.*]+)*
\}{1}
)
)
这就是我目前所拥有的,但我开始认为这不是我要走的路。即使它工作正常,它也不允许应该有效的{A}
所以基本上我要做的是检查每个[A-Z0-1-.*]
元素是否被|
分割,并且{}
括号内没有空元素
有一个概念让我觉得很有意义,那就是有n个可能的元素。比如说,要验证的字符串是Foo{A}Bar{B|C}Test
我检查的方法有两个元素。一个元素用于检查字母字符,另一个元素用于检查括号中的字符。
因此,要检查上面的字符串,我需要执行alphaElem*| BracketElem*| alphaElem*| BracketElem*| alphaElem*
但是这需要大量的书写,如果元素的数量增加,它就不能扩展。有什么方法可以用正则表达式解决这个问题吗?此解决方案将在一次过程中验证您(似乎)想要的一切(请参见上的) ):
^\w+({[A-Z0-1-\.*]+(\\\\[A-Z0-1-\.*]+)*}\w+*$
这是几层可能重复的部分
以下是分类:
^
锚定匹配文本开头
\w+
匹配任意数量的“word”字符
{[A-Z0-1-\.*]+(\\|[A-Z0-1-\.*]+)*}
匹配括号中的一个元素,可能后跟括号中的任意数量的管道和其他元素
({[A-Z0-1-\.*]+(\\|[A-Z0-1-\.*]+)*}\w+*.
这是前面描述的匹配,允许重复零到多次,每次使用另一个“字”
$
锚定匹配文本结尾您可以使用
{[A-Z0-1-_.*]+(?:\|[A-Z0-1-_.*]+)*}
请注意,最后一个*
修饰符可以替换为。例如,{0,2}
匹配0、1或2次(匹配{…}
中的1、2或3个元素)
看
详细信息
-a{
字符{
-字符类中定义的1个或多个字符(大写ASCII字母、[A-Z0-1-..*]+
、0
、1
、-
或
字符)*
-匹配的0次或多次出现:(?:
-a\\\\\\
字符\
-character类中定义的一个或多个字符[A-Z0-1-..*]+
-分组构造结束)*
-a}
字符}
注意:您不需要在.NET正则表达式中转义
{
和}
字符,如果之前没有与min
或min,max
值匹配的{
,则将{
解析为文本{
足够智能。我对您的实际输入感到困惑。是{a | B | C}
form或Foo{A}Bar{B|C}Test
?您必须检查哪一个?可能您需要。最后一个*
可以替换为{0,2}
以匹配0、1或2次(匹配{…}
中的1、2或3个元素)。@Fildor最终输入可能是字符串和{A}B}C}的任意组合Bracketso我的建议怎么样?是的,这就是我想要的