【发布时间】:2012-09-22 18:49:11
【问题描述】:
我正在寻找一种方法来确定单个正则表达式是否匹配整个字符串、字符串的开头或 C# 中的一部分。
在Java中,您可以构造一个Matcher对象,并使用方法matches()检查它是否匹配整个输入,lookingAt()查看它是否匹配输入的开头,并使用@ 987654324@ 看看是否有任何匹配的字符串。
在 .NET 中,我可以使用Match.Success 来查看是否有任何匹配项,并检查Match.Index 和Match.Length 是否有上述条件。
问题是,如果找到较小的匹配项,它不会尝试匹配整个输入。例如,如果输入“1234”呈现给正则表达式@"\d{2}|\d{4}",它将匹配前两位数字。
在这种情况下,我需要使用@"^(\d{2}|\d{4})$" 模式构造另一个Regex 来测试整个输入,然后测试另一个以查看它是否与开头匹配。
有没有办法告诉同一个Regex 类更喜欢全输入匹配,这样我就不需要为此创建(和编译)另一个正则表达式?
编辑:问题不在于模式,这只是说明我的意思的一个例子。
【问题讨论】:
-
这是一个不同的表达式,它也接受一个 3 位数的输入。 (这意味着 2 到 4 位数字,而不是其中任何一个数字)。另外,问题不在于模式,而只是显示差异的示例。 - 编辑:这是对建议 \d{2,4} 的已删除评论的回复
-
你不能交换订单吗,即
@"^(\d{4}|\d{2})$"