正则表达式在.net中不起作用
本文关键字:不起作用 net 正则表达式 | 更新日期: 2023-09-27 18:27:23
我使用以下表达式。
''W〔A-C〕{3}
目标是匹配A和C之间的任何字符中前面没有任何字符的3个字符。因此,输入"ABC"匹配,但"DABC"不匹配。
当我使用各种在线正则表达式工具(例如。http://gskinner.com/RegExr/),它工作得很好。当我尝试在asp.net RegularExpressionValidator或RegEx类中使用它时,它永远不会匹配任何内容。
我试过各种不同的方法,不允许在比赛前出现一个角色。例如
[^'w] and [^a-zA-Z0-9]
所有这些都在在线工具中工作,但不在.net中。
这个测试失败了,但我不确定为什么?
[Test]
public void RegExWorks()
{
var regex = new Regex("''W[A-C]{3}");
Match match = regex.Match("ABC");
Assert.IsTrue(match.Success);
}
这样的东西怎么样:
^[A-C]{3}
它很简单,但似乎符合您的要求,我在rubular.com和.NET 中测试了它
问题是需要有一个'W
字符。使用更改来修复此问题,或者使用查找来确保没有无效字符。
变更:
(?:'W|^)[A-C]{3}
但我更喜欢负面的背后:
(?<!'w)[A-C]{3}
'b
(如gymbralls的答案)是(?<!'w)(?='w)|(?<='w)(?!'w)
的缩写,在这种情况下,它的意思只是(?<!'w)
,因此是等价的。
此外,在C#中,您可以使用@
引用,这样您就不必双重转义,例如:
var regex = new Regex(@"(?<!'w)[A-C]{3}");
您应该考虑尝试:
[Test]
public void RegExWorks()
{
var regex = new Regex("''b[A-C]{3}");
Match match = regex.Match("ABC");
Assert.IsTrue(match.Success);
}
''b
匹配单词边界,这意味着它将匹配"ABC"以及"ABC"answers"$ABC"。使用''W
需要有一个非单词字符,这听起来不像是你想要的。
如果我遗漏了什么,请告诉我。
它很简单,就像"[A-C]{3}"这个
好的,所以您可以尝试以下表达式
"[A-C][A-C]{2}"