提问人:kurasa 提问时间:4/23/2015 最后编辑:Communitykurasa 更新时间:4/24/2015 访问量:196
如何将两个正则表达式合二为一?
how can I join two regex into one?
问:
我有两个正则表达式,我需要将其合并为一个,因为我在 ASP.NET 中使用 RegularExpressionAttribute,并且它不允许多个实例。
如何将以下两个正则表达式合二为一?
.*?@(?!.*?\.\.)[^@]+$
[\x00-\x7F]
第一个检查电子邮件的域部分中是否没有 2 个连续的点,第二个正则表达式检查所有字符是否都是 ASCII
我以为这可能就像将它们连接在一起一样容易,但这行不通(.*?@(?!.*?\.\.)[^@]+$)([\x00-\x7F])
这是与此问题相关的上一篇文章的链接
编辑:我正在使用 reglarexpression 属性装饰我的视图模型的字符串属性,并且它使用不显眼的方式呈现为 javascript,因此它必须使用 javascript 进行验证。我在最初的帖子中没有提到这一点
答:
3赞
anubhava
4/23/2015
#1
您可以使用:
^[\x00-\x7F]+?@(?!.*?\.\.)(?=[\x01-\x7F]+$)[^@]+$
评论
0赞
Wiktor Stribiżew
4/23/2015
您的正则表达式也将匹配 。444@[email protected]
0赞
Wiktor Stribiżew
4/23/2015
我记得你说过,不是吗?:)look-arounds are expensive
0赞
anubhava
4/23/2015
我不记得我是在什么问题上发表过这种声明的。但总的来说,是的,如果有其他选择,那么请避免环顾四周。但是,OP 已经在使用前瞻(?!.*?\.\.)
0赞
kurasa
4/24/2015
谢谢你的回答。不幸的是,我只能选择一个答案。我给你投了赞成票
0赞
kurasa
4/24/2015
如上所述 - 我的单元测试通过,但实际上在页面上不起作用。我将编辑我的问题并表明我的意思
3赞
Wiktor Stribiżew
4/23/2015
#2
你可以只使用这个正则表达式
^[\x00-\x7F-[@]]*?@(?!.*?\.\.)[\x00-\x7F-[@]]+$
或者,如果您想在以下之前匹配至少 1 个字符:@
^[\x00-\x7F]+@(?!.*?\.\.)[\x00-\x7F-[@]]+$
思想也包括符号。在 C# 正则表达式中,我们可以在字符类中使用从范围中减去它。[\x00-\x7F]
@
-[@]
而且您不需要锚点,因为我相信您在 RegularExpressionAttribute
中使用它。
这是 regexstorm.net 上的演示,删除第二个,您将进行匹配。@
评论
0赞
Wiktor Stribiżew
4/24/2015
我修复了它,因为我忘记将锚点和字符类减法添加到第一个范围出现。但是,由于您更新了问题,指出正则表达式需要与 javascript 一起使用,我同意这是行不通的。
评论