C# regex以字符集开始和结束,但两者之间的字符集不同
我正在尝试创建一个正则表达式:C# regex以字符集开始和结束,但两者之间的字符集不同,c#,.net,regex,C#,.net,Regex,我正在尝试创建一个正则表达式: 必须具有一组字符中的第一个字符(first\u set) 可以选择在不同的字符集中包含后续字符(SECOND\u set) 但是如果它有2个或更多字符,最后一个字符必须在第一个\u集中 总共不能超过MAX_CHARS个字符 范例 第一组=a-c或e-g(因此不包括d) SECOND\u SET=a-g 最大字符数=10 以下是我目前掌握的情况: ^[a-c|e-g][a-g]{0,8}[a-c|e-g]{0,1}$ 这似乎有效,除非d是最后一个字符,并且字
- 必须具有一组字符中的第一个字符(
)first\u set
- 可以选择在不同的字符集中包含后续字符(
)SECOND\u set
- 但是如果它有2个或更多字符,最后一个字符必须在
第一个\u集中
- 总共不能超过
个字符MAX_CHARS
=a-c或e-g(因此不包括d)第一组
=a-gSECOND\u SET
=10最大字符数
^[a-c|e-g][a-g]{0,8}[a-c|e-g]{0,1}$
这似乎有效,除非d
是最后一个字符,并且字符总数
有办法解决这个问题吗?您可以使用
^(?!.{11})(?=.*[a-ce-g]$)[a-ce-g][a-g]{0,9}$
看
详细信息
-字符串的开头^
-最多允许10个字符(?!.{11})
-在0个或更多字符之后,最后一个字符应来自(?=.*[a-ce-g]$)
第一组
-第一套[a-ce-g]
中的字母
-第二组[a-g]{0,9}
中的0到9个字符
-字符串结束$
|
在字符类中匹配文字管道字符,您需要将其从模式中删除
(?!.{11})
在字符串开头执行一次负前瞻,如果字符串中有任何11个字符(换行符除外),则匹配失败。您也可以使用(?=.{0,10}$)
,它只需要字符串中的0到10个字符。这与不应该匹配的情况相匹配:abcdabcdd
它以d
结尾,最后一个字符必须在第一个字符集中<代码>d不在第一个set@SFun28好的,修复了。这不适用于应该匹配的a
。输入字符串可以选择在第一个字符串之后有后续字符,但根据我的帖子,它是可选的。我认为这是可行的:^(?。{11})(?=.[a-ce-g]$)[a-ce-g][a-g]{0,9}$
(将+
更改为*
)@SFun28是的,首先用*
替换+
,我以为它
在中,但如果它有2个或更多字符,则表示第二组
,但似乎您指的是整个字符串,对吗?是的,我指的是整个字符串。抱歉搞混了!