嵌套量词解决方法?

时间:2012-01-26 02:46:32

标签: c# regex

我有一个问题,我似乎无法找到解决方案。我正在使用Regex.IsMatch检查输入是否符合预期。如果输入包含**++,则会抱怨。例如,我想将"Message **"保存为可接受的值,但每当我尝试在其上调用Regex.IsMatch时,我会一直收到ArgumentException:"Nested quantifier *"。有没有办法解决这个问题?

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

2 个答案:

答案 0 :(得分:2)

听起来您正试图将Message **作为字面值进行匹配?在这种情况下,请致电Regex.Escape

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

然后你可以像这样使用它:

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

但是,如果您只是使用文字值而不是任何正则表达式功能,那么最好使用string.Contains

答案 1 :(得分:1)

"Message *"作为正则表达式意味着“匹配任何字符串按顺序匹配的字符串,然后匹配零个或多个空格”。

Regex.IsMatch需要两个输入 - 正则表达式以查看它是否匹配,以及运行正则表达式的字符串。好像你有两个混淆了。

如果你试图合法地使用"Message **"作为正则表达式,你可能意味着逃避"**"。如果您只需要用精心挑选的字符串来转义它,那么将字符串修复为@"Message \*\*"。如果您需要修复任意数量的正则表达式输入,请先在字符串上运行Regex.Escape@"Message \*\*" == Regex.Escape("Message **")