调试后正则表达式不起作用

Posted

技术标签:

【中文标题】调试后正则表达式不起作用【英文标题】:Regular expression not working after debugging 【发布时间】:2009-07-10 14:38:23 【问题描述】:

我有一个带有正则表达式验证器文本框的 ASP.NET 网站。

我已经更改了正则表达式验证属性“validator expression”中的表达式,并且在编译(重建)和运行后,验证 CHANGE 没有反映。

之前的验证工作正常,但更改后的验证不工作。

请帮帮我!

编辑:

第一个代码:

([a-zA-Z0-9_-.]+)\@((base.co.uk)|(base.com)|(group.com))

第二个代码:

@"([a-zA-Z0-9_\-.]+)@((base\.co\.uk)|(base\.com)|(group\.com)|(arg\.co\.uk)|(arggroup\.com))"

【问题讨论】:

您可能需要发布您的正则表达式以及您用于初始化验证器的代码。 你是在 VS 中本地运行还是查看已发布的站点?如果是后者,您是否有可能没有发布更改?如果是前者,请尝试关闭浏览器并再次运行您的网站。除此之外,代码示例将无济于事。 第一个代码 ([a-zA-Z0-9_-.]+)\@((base.co.uk)|(base.com)|(group.com)|(arg. co.uk)|(arggroup.com)) 第二个代码@"([a-zA-Z0-9_\-.]+)@((base\.co\.uk)|(base\.com)|(组\.com)|(arg\.co\.uk)|(arggroup\.com))" 在构建并单击 > 图标后,我正在运行 vs2008。 IE自动来了,我已经关闭又打开了浏览器..NO JOY 错误地将第一个代码与第二个相同..现在在问题中更正它 【参考方案1】:

假设您的“第一个代码”是文字正则表达式,您需要使用反斜杠转义字符类中的连字符。

您的“第二个代码”是一个正则表达式,格式为 C# 逐字字符串,可以匹配电子邮件地址,例如whatever@base.co.uk。这个正则表达式没有任何问题。

如果它不能按您想要的方式工作,您将不得不发布您使用此正则表达式的代码。

【讨论】:

【参考方案2】:

在这部分:[a-zA-Z0-9_\-.] 你正在转义连字符。将连字符放在正则表达式字符类中的正确方法是放在首位(或者它认为它是范围的一部分):

[-a-zA-Z0-9_.]

然后你删除了@之前的反斜杠。在 Perl 中,@ 将被视为列表名称的一部分,但在 C# 中,我不确定不转义它会产生什么影响。

期间的转义也是可疑的。您可能需要将它们加倍:例如\\。相反,我对句号所做的是使用字符类:即 [.] 在字符类中,句点失去了它的特殊含义。

试试这个:

@"([-a-zA-Z0-9_.]+)\@((base[.]co[.]uk)|(base[.]com)|(group[.]com)|(arg[.]co[.]uk)|(arggroup[.]com))"

【讨论】:

这很奇怪。使用那个未转义的连字符,原来的正则表达式甚至不应该编译。当我在 RegExLib 的在线测试器中测试它时,我收到一条错误消息“[x-y] range in reverse order”。 对字符类中的连字符进行转义,使其在 Perl 和 .NET 中都能完美运行。 C#不像Perl那样做变量插值,所以不需要转义@。 [.] 匹配文字点,就像 \。除了要输入一个字符之外。 C# 中的逐字字符串不需要转义反斜杠。 我曾经知道一个网站可以让你指定你正在测试的正则表达式种类,它支持很多。我失去了它的踪迹。我更喜欢使用广泛支持的语法,因为它简化了从系统到系统的转换。您最喜欢哪种正则表达式测试器?

以上是关于调试后正则表达式不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有熊猫的日期正则表达式过滤器不起作用

正则表达式正后面看起来不起作用?

为啥正则表达式不起作用

正则表达式的replace不起作用?

Notepad++ 正则表达式替换 - \1 不起作用?

为啥这个 javascript 正则表达式不起作用?