Разбор "*" - квантификатор {x,y} ничего не следует
Не удается, когда я пытаюсь Regex.Replace()
метод. как я могу это исправить?
Replace.Method (String, String, MatchEvaluator, RegexOptions)
Я пытаюсь код
<%# Regex.Replace( (Model.Text ?? "").ToString(), patternText, "<b>" + patternText + "</b>", RegexOptions.IgnoreCase | RegexOptions.Multiline)%>
3 ответа
Вы пытались использовать только строку "*"
как регулярное выражение? По крайней мере, это то, что вызывает вашу ошибку здесь:
PS Home:\> "a" -match "*"
The '-match' operator failed: parsing "*" - Quantifier {x,y} following nothing..
At line:1 char:11
+ "a" -match <<<< "*"
Характер *
является особенным в регулярных выражениях, поскольку позволяет предыдущему токену появляться ноль или более раз. Но на самом деле должно быть что-то предшествующее этому.
Если вы хотите сопоставить буквенную звездочку, используйте \*
как регулярное выражение. В противном случае вам нужно указать, что может повториться. Например, регулярное выражение a*
соответствует либо ничего, либо произвольно много a
подряд.
Вы, кажется, есть одинокий "*"
в вашем регулярном выражении. Это не правильно. "*"
не означает "что-нибудь" (как в спецификации файла), но "предыдущий может повторяться 0 или более раз".
Если вы хотите "что-нибудь", вы должны написать ".*"
, "."
означает "любой отдельный символ", который затем будет повторяться.
Изменить: То же самое произойдет, если вы используете другие квантификаторы по отдельности: "+"
, "?"
или же "{n,m}"
(где n и m - числа, которые определяют нижний и верхний предел).
- "*" идентично "{0,}",
- "+" идентичен "{1,}",
- "?" идентично "{0,1}"
который может объяснить текст или сообщение об ошибке, которое вы получите.
Спасибо,
и я починил вот так
<%# Regex.Replace( (Model.Text ?? "").ToString(), Regex.Escape(patternText), "<b>" + patternText + "</b>", RegexOptions.IgnoreCase | RegexOptions.Multiline)%>