解析“*” - 量词 x,y 啥都没有
Posted
技术标签:
【中文标题】解析“*” - 量词 x,y 啥都没有【英文标题】: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 失败了? 当我尝试不仅*,+时会发生? 【参考方案1】:您是否尝试仅使用字符串"*"
作为正则表达式?至少这就是导致您的错误的原因:
PS Home:\> "a" -match "*"
The '-match' operator failed: parsing "*" - Quantifier x,y following nothing..
At line:1 char:11
+ "a" -match <<<< "*"
字符*
在正则表达式中是特殊的,因为它允许前面的 标记出现零次或多次。但实际上必须有一些东西在它之前。
如果要匹配文字星号,则使用\*
作为正则表达式。否则,您需要指定 what 可能会重复。例如,正则表达式 a*
不匹配任何内容或连续匹配任意多个 a
s。
【讨论】:
只是在这里为使用Where-Object $_ -notmatch '*text*text*'
的任何人添加评论将失败,请改用'text.text'
【参考方案2】:
您的正则表达式中似乎只有一个 "*"
。这是不正确的。 "*"
并不意味着“任何东西”(就像在文件规范中一样),而是“前一个可以重复 0 次或更多次”。
如果你想要“任何东西”,你必须写".*"
。 "."
表示“任何单个字符”,然后会重复。
编辑:
如果您单独使用其他量词,也会发生同样的情况:"+"
、"?"
或 "n,m"
(其中 n 和 m 是指定下限和上限的数字)。
这可能会解释您收到的文本或错误消息。
【讨论】:
任何单个字符,有时,换行符除外。【参考方案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?以上是关于解析“*” - 量词 x,y 啥都没有的主要内容,如果未能解决你的问题,请参考以下文章