解析“*” - 量词{x,y}什么都没有

时间:2009-11-25 16:47:23

标签: c# .net

当我尝试Regex.Replace()方法时,

失败。 我该怎么办呢?

Replace.Method (String, String, MatchEvaluator, RegexOptions)

我尝试代码

<%# Regex.Replace( (Model.Text ?? "").ToString(), patternText, "<b>" + patternText + "</b>", RegexOptions.IgnoreCase | RegexOptions.Multiline)%>

3 个答案:

答案 0 :(得分:36)

您是否尝试仅使用字符串"*"作为正则表达式?至少这是导致你的错误的原因:

PS Home:\> "a" -match "*"
The '-match' operator failed: parsing "*" - Quantifier {x,y} following nothing..
At line:1 char:11
+ "a" -match  <<<< "*"

字符*在正则表达式中是特殊的,因为它允许前面的标记出现零次或多次。但实际上必须有一些先于它的东西。

如果要匹配文字星号,请使用\*作为正则表达式。否则,您需要指定可能重复的。例如,正则表达式a*连续匹配任意内容或任意多个a

答案 1 :(得分:13)

您的正则表达式中似乎只有一个"*"。这是不正确的。 "*"并不意味着“任何东西”(如文件规范中所述),但“之前的内容可以重复0次或更多次”。

如果你想要“任何东西”,你必须写".*""."表示“任何单个字符”,然后重复。

修改: 如果您使用其他量词,则会发生同样的情况:"+""?""{n,m}"(其中n和m是指定下限和上限的数字)。

  • “*”与“{0,}”,
  • 相同
  • “+”与“{1,}”,
  • 相同
  • “?”与“{0,1}”
  • 相同

可能会解释您收到的文本或错误消息。

答案 2 :(得分:1)

谢谢,

我修好了这个

<%# Regex.Replace( (Model.Text ?? "").ToString(), Regex.Escape(patternText), "<b>" + patternText + "</b>", RegexOptions.IgnoreCase | RegexOptions.Multiline)%>