Синтаксический разбор "*" - квантификатор {x, y} после ничего

не работает, когда я пытаюсь использовать метод Regex.Replace(). как я могу это исправить?

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

Я пробую код

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

Ответы

Ответ 1

Вы пытались использовать только строку "*" как регулярное выражение? По крайней мере, что вызывает вашу ошибку здесь:

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

Символ * является специальным в регулярных выражениях, поскольку он позволяет предыдущему токену появляться ноль или более раз. Но на самом деле должно быть что-то впереди.

Если вы хотите совместить буквенную звездочку, используйте \* как регулярное выражение. В противном случае вам нужно указать, что может повториться. Например, регулярное выражение a* не соответствует ни одному, ни произвольному числу a в строке.

Ответ 2

В вашем регулярном выражении появляется одиночный "*". Это неверно. A "*" не означает "ничего" (например, в спецификации файла), но "предыдущий может быть повторен 0 или более раз".

Если вам нужно "что угодно", вам нужно написать ".*". "." означает "любой отдельный символ", который затем будет повторяться.

Edit: То же самое произойдет, если вы используете другие кванторы по своему усмотрению: "+", "?" или "{n,m}" (где n и m - числа, которые определяют нижний и верхний предел).

  • "*" идентичен "{0,}",
  • "+" идентичен "{1,}",
  • "?" идентичен "{0,1}"

который может объяснить текст или сообщение об ошибке, которое вы получили.

Ответ 3

спасибо,

и я зафиксировал это как

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