我的代码为
Regex regExValue = new Regex(cirtText.Properties.Mask.EditMask);
但我得到一个例外
消息:解析 “((WWW)。([A-ZA-Z0-9] {1,6} +。+)* [A-ZA-Z] {2,6-})” - 嵌套量词+。
任何人都可以让我知道解决方案吗?
答案 0 :(得分:3)
这里有两个量词{1,6}
(仅1到6之间)和+
(至少1)。那是你的错误。你需要选择一个。
[a-zA-Z0-9]{1,6}+
无论如何,你可能想写这样的正则表达式:
((www)\.([a-zA-Z0-9]{1,6}\.)*[a-zA-Z]{2,6})
答案 1 :(得分:1)
我不知道C#正则表达式或你想要做什么(即:编辑,验证,等等)
我知道Perl,所以我会捅它。
在正则表达式中,一个时期是一个元字符。如果你想要一个文字时期,你必须逃避
它带有'。'元时期表示匹配任何角色。如果你想要一个文字句号,
为了保留你拥有的东西,在Perl中你不应该双引用正则表达式或逃避
逃亡。单引号应该可以正常工作
'((www)\.([a-zA-Z0-9]{1,6}+\.+)*[a-zA-Z]{2,6})'
现在,除非你想要多个文字句号,否则你应该摆脱+量词
'((www)\.([a-zA-Z0-9]{1,6}+\.)*[a-zA-Z]{2,6})'
如前所述,{n,m}本身就是一个量词。在它之后添加+是双量词
在Perl中,在量词意味着一个积极的条件之后加上+并且在版本5.10中是合法的
所以,摆脱额外+它现在是
'((www)\.([a-zA-Z0-9]{1,6}\.)*[a-zA-Z]{2,6})'
最后,*量词意味着0次或更多次。你为什么要匹配0次?
修复它现在是
'((www)\.([a-zA-Z0-9]{1,6}\.)+[a-zA-Z]{2,6})'
作为一个额外的,你有一个主要的分组围绕一切,围绕www和一个分组
在中间([a-zA-Z0-9] {1,6}。)+在捕获中没有好处,只是在分组中。
如果要捕获开头,中间,结尾,则应添加适当的捕获
'((www\.)(([a-zA-Z0-9]{1,6}\.)+)([a-zA-Z]{2,6}))'
或者,在Perl中,这样写得更好
'((www\.)((?:[a-zA-Z0-9]{1,6}\.)+)([a-zA-Z]{2,6}))'
答案 2 :(得分:0)
正如其他人所提到的,拥有两个连续的量词是没有意义的。看起来你可能想说“这些一到六个字符组中的一个或多个”;你有可能省略括号吗?如果这就是你的意思,这很容易解决:
(请注意,在.NET正则表达式中,如果你真的想要一个点,你必须逃避这段时间,否则它将匹配任何东西)
@"((www)\.(([a-zA-Z0-9]{1,6}+)\.+)*[a-zA-Z]{2,6})"
答案 3 :(得分:0)
您可以访问此处link text
了解如何将正则表达式用作Mask。说实话,你的问题不是关于正则表达式。您的演示代码存在一些特殊性,这表明DevExpress实现了RegEx和Masks。你可能想检查那里。即:
的DevExpress
有关正则表达式的更多信息,请参阅“掩码类型:完整” 功能正则表达式“文档在帮助文档中 XtraEditors库。
您看起来正在使用DevExpress与.Net的Regex类。但DevExpress似乎有自己的实现。
此外,通过量词的重复输入可能与掩码有关。无论如何,你可以尝试这个,但它只是一个猜测:
'www\.(([a-zA-Z0-9]{1,6}\.?)+)*\.[a-zA-Z]{2,6}'