我有一个问题,我似乎无法找到解决方案。我正在使用Regex.IsMatch检查输入是否符合预期。如果输入包含**
,++
,则会抱怨。例如,我想将"Message **"
保存为可接受的值,但每当我尝试在其上调用Regex.IsMatch时,我会一直收到ArgumentException:"Nested quantifier *"
。有没有办法解决这个问题?
public bool ResponseMatch(string responseText)
{
return Regex.IsMatch(responseText, regexPatternString);
}
答案 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 **")