Разбор "*" - квантификатор {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)%>
Другие вопросы по тегам