解析“*” - 量词 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* 不匹配任何内容或连续匹配任意多个 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?

以上是关于解析“*” - 量词 x,y 啥都没有的主要内容,如果未能解决你的问题,请参考以下文章

证明或反驳量词(命题逻辑)

离散数学-谓词逻辑

逻辑量词

如何在 OO 编程中实现存在量词?

序言中的普遍和存在量词

使用 Coq 证明存在量词