【问题标题】:parsing "*" - Quantifier {x,y} following nothing解析“*” - 量词 {x,y} 什么都没有
【发布时间】:2017-03-22 10:22:12
【问题描述】:

当我尝试Regex.Replace() 方法时失败。 我该如何解决?

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

我试试代码

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

【问题讨论】:

  • 呃,当您尝试 Regex.Replace 时,what 失败了?
  • 当我尝试不仅*,+时会发生?

标签: c# .net


【解决方案1】:

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

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

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

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

【讨论】:

  • 只是在这里为使用Where-Object {$_ -notmatch '*text*text*'} 的任何人添加评论将失败,请改用'text.text'
【解决方案2】:

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

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

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

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

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

【讨论】:

  • 任何单个字符,有时,换行符除外。
【解决方案3】:

谢谢,

我就这样修复了

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

【讨论】:

  • (Model.Text ?? "").ToString() 实际上等同于Model.Text ?? "",因为字符串上的ToString() 只会返回该字符串。
  • 当 String.Replace 可以完成这项工作时,你为什么还要使用 Regex.Replace?
猜你喜欢
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
相关资源
最近更新 更多