嵌套的量词解决方法

本文关键字:方法 解决 量词 嵌套 | 更新日期: 2023-09-27 18:21:22

我遇到了一个问题,似乎找不到解决方案。我正在使用Regex.IsMatch检查输入是否符合预期。如果一个输入包含**++,它会抱怨。例如,我想将"Message **"保存为可接受的值,但每当我尝试调用Regex.IsMatch时,我总是收到一个ArgumentException,上面写着:"Nested quantifier *"。有什么方法可以解决这个问题吗?

public bool ResponseMatch(string responseText)
{
   return Regex.IsMatch(responseText, regexPatternString);
}  

嵌套的量词解决方法

听起来像是要将Message **匹配为文字值?在这种情况下,调用Regex.Escape:

Regex.Escape("Message **") == "Message' '*'*"

然后你可以这样使用它:

var valueToMatch = "Message **";
var matches = Regex.IsMatch(input, Regex.Escape(valueToMatch));

但是,如果您只使用文字值而不使用任何regex功能,那么使用string.Contains可能会更好。

"Message *"作为正则表达式的意思是"匹配任何按该顺序具有字符m e s a g e的字符串,然后匹配零个或多个空格"。

Regex.IsMatch接受两个输入——一个是查看是否匹配的正则表达式,另一个是运行正则表达式的字符串。

如果您试图合法地使用"Message **"作为正则表达式,那么您可能想要转义"**"。如果您只需要在手工选择的字符串中转义它,那么将字符串固定为@"Message '*'*"。如果需要修复任意数量的regex输入,请首先在字符串上运行Regex.Escape@"Message '*'*" == Regex.Escape("Message **")