Синтаксический разбор "*" - квантификатор {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)%>