正则表达式中的匹配函数为空?

时间:2012-05-31 17:43:12

标签: c# regex visual-studio-2010 null match

我似乎在视觉工作室中收到错误消息

Value cannot be null.
Parameter name: input

当我尝试做的时候 Match BirthYear2 = Regex.Match(kvpInd2.Value.birth.date, BirthPattern2);

我想知道可以让Match函数产生null吗?基本上,我不介意kvpInd2.Value.birth.date不包含表达式

谢谢

4 个答案:

答案 0 :(得分:9)

在您的情况下,Regex.Match并非生成一个null,您传递一个null作为其第一个参数

  

例外:   ArgumentNullException - inputpattern为空。

如果您希望null输入有效,可以按如下方式更改通话:

Match BirthYear2 = Regex.Match(kvpInd2.Value.birth.date ?? "", BirthPattern2);

BirthPattern2kvpInd2.Value.birth.date时,这将返回不匹配(假设null与空字符串不匹配),而不是抛出异常。

答案 1 :(得分:3)

此处最有可能的问题是kvpInd2.Value.birth.datenull。如果找不到模式,Regex.Match将不会抛出异常,但如果输入为null,则会抛出您看到的异常。

答案 2 :(得分:0)

在进行匹配之前,只需检查值是否为null。完成。或者,我错过了什么?另一种选择,我想你可以这样做:kvpInd2.Value.birth.date ?? ""。这将把null视为一个空字符串,希望你的模式不匹配。

答案 3 :(得分:0)

在访问所有属性链之前,您需要检查链中的对象是否为空。

if(kvpInd2 != null && kvpInd2.Value != null && kvpInd2.Value.birth != null && kvpInd2.Value.birth.date!= null) {
    Match BirthYear2 = Regex.Match(kvpInd2.Value.birth.date, BirthPattern2);
    ...
}