2009-11-25 3 views
15

не работает, когда я пытаюсь использовать метод Regex.Replace(). как я могу это исправить?синтаксический разбор «*» - квантификатор {x, y} после ничего

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

Стараюсь код

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

Er *, что * терпит неудачу при попытке Regex.Replace? – Joren

+1

Пример кода –

+0

Это происходит, когда я стараюсь не только *, +? – loviji

ответ

31

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

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

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

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

+0

с помощью '\ *' помог мне, спасибо! – 2013-03-03 07:58:28

+0

Просто добавьте комментарий для любого пользователя, использующего 'Where-Object {$ _ -notmatch '* text * text *'}', который будет терпеть неудачу, вместо этого используйте '' text.text'' – user4317867

12

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

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

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

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

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

+0

Любой отдельный символ, за исключением, иногда, новых строк. – Joren

1

спасибо,

и я установил как этот

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

'(Model.Text ??" ") .ToString()' на самом деле эквивалентен просто 'Model.Text ?? "" ', поскольку' ToString() 'в строке просто возвращает эту строку. – Joren

+1

Почему вы даже используете Regex.Replace, когда String.Replace выполнит эту работу? – erikkallen

Смежные вопросы