【问题标题】:Regex not allowing backslash正则表达式不允许反斜杠
【发布时间】:2018-04-16 05:56:23
【问题描述】:

我的正则表达式有问题,因为在允许的字符后面不允许反斜杠。我已经通过在线正则表达式测试器对此进行了测试并且它正在工作,但是当我在我的 c# 上使用它时,它不惜一切代价返回 true。

这是我的正则表达式:var myRegex = new Regex("^[a-zA-Z0-9]+((([._-][^\/<>()[\\]_.,;:\\s@\"]+)*)|(\".+\"\\\/))$");

My Regex

输入样本:

hello-\world : Negative   
hello\world : Negative  
hello/world : Negative  
hello : Positive

但是,这是我在c#中实现时的结果

输入样本:

hello-\world : 正数(应该是负数)
你好\世界:否定
你好/世界:否定
你好:积极的

我似乎找不到否定反斜杠有什么问题。有点难以调试和检查为什么 C# 版本的 Regex 会给出不同的结果。

感谢所有反馈。

编辑:将正则表达式更新为 c#

【问题讨论】:

  • 你试过双反斜杠吗?
  • @TahaPaksu 是的,我确实尝试过,但仍然通过它。
  • 您能否阐明一下您的业务逻辑?那就更好理解了
  • @RizwanM.Tuman 我试图否定 \ 或反斜杠。但是,反斜杠与后续允许的字符结合时是允许的,这是不应该的。
  • 您可以尝试在正则表达式的末尾添加一个 $。这样,正则表达式必须匹配完整的字符串,而不仅仅是通常测试的子字符串。虽然,在不确切知道您拥有什么代码的情况下,即围绕正则表达式对象进行调用,但很难理解为什么会出现误报。

标签: c# regex


【解决方案1】:

您的正则表达式中有错误。写了一些测试来纠正它:

        var myRegex = new Regex("^[a-zA-Z0-9]+((([._-][^\\/<>()[\\]_.,;:\\s@\"\\\\]+)*)|(\".+\"\\\\/))$");
        Assert.IsFalse(myRegex.IsMatch("hello-\\world"));
        Assert.IsFalse(myRegex.IsMatch("hello\\world"));
        Assert.IsFalse(myRegex.IsMatch("hello/world"));
        Assert.IsTrue(myRegex.IsMatch("hello"));

您的第一组允许破折号,然后没有禁止反斜杠。

【讨论】:

  • 我将通过使用@(in c#) 和字符类进一步提高可读性:@"^\d+((([._-][^\/()[]_ .,;:\s@"\]+)*)|(".+"\\/))$"
  • @Chriz 对不起,对 Regex 本身来说有点新手,但是在这部分中将@结果添加到意外字符\]+)*)|(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
相关资源
最近更新 更多