2009-11-25 13 views
15

falla cuando intento el método Regex.Replace(). ¿cómo puedo solucionarlo?analizando "*" - El cuantificador {x, y} siguiente nada

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

Trato código

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

Er, lo que * * fracasa cuando intenta Regex.Replace? – Joren

+1

código de muestra, por favor –

+0

Ocurre cuando intento no solo *, +? – loviji

Respuesta

31

¿Usted intentó utilizando sólo la cadena "*" como una expresión regular? Al menos eso es lo que hace que su error aquí:

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

El carácter * es especial en las expresiones regulares, ya que permite que el anterior contadores a aparecer cero o más veces. Pero en realidad tiene que haber algo que lo preceda.

Si desea hacer coincidir un asterisco literal, utilice \* como expresión regular. De lo contrario, debe especificar que se puede repetir. Por ejemplo, la expresión regular a* no coincide con nada o con muchos a s en una fila.

+0

usando '\ *' me ayudó, ¡gracias! –

+0

Solo para agregar un comentario aquí para cualquiera que use 'Where-Object {$ _ -notmatch '* text * text *'}' fallará, en su lugar use ''text.text'' – user4317867

12

Parece que tiene un "*" solitario en su expresión regular. Eso no es correcto. Un "*" no significa "nada" (como en una especificación de archivo), pero "lo anterior se puede repetir 0 o más veces".

Si quiere "algo" tiene que escribir ".*". El "." significa "cualquier carácter individual", que luego se repetirá.

Editar: Lo mismo sucedería si utiliza otros cuantificadores por su propia: "+", "?" o "{n,m}" (donde nym son números que especifican límite inferior y superior).

  • "*" es idéntica a "{0,}",
  • "+" es idéntica a "{1,}",
  • "?" es idéntico a "{0,1}"

que podría explicar el texto o el mensaje de error que aparece.

+0

Cualquier carácter excepto, a veces, nuevas líneas. – Joren

1

gracias,

y me fijo como esto

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

'(Model.Text ??" ") .ToString()' es en realidad equivalente a 'Model.Text ?? "" ', como' ToString() 'en una cadena simplemente devuelve esa cadena. – Joren

+1

¿Por qué incluso usa Regex.Replace cuando String.Replace hará el trabajo? – erikkallen

Cuestiones relacionadas