regular avanzada

[C #] avanzada regular

.NET en la expresión regular se basa en expresiones regulares en Perl 5.

 

Tiempo de espera

 

A partir de .NET Framework 4.5, soporte para expresiones regulares el período de tiempo de espera especificado en la operación. Si un partido es tiempo de espera, que será lanzado  RegexMatchTimeoutException.

 

Todos los métodos están sobrecargados con el aumento de los parámetros de tiempo de espera:

 

public static Match Match(string input, string pattern, RegexOptions options, TimeSpan matchTimeout); public static MatchCollection Matches(string input, string pattern, RegexOptions options, TimeSpan matchTimeout); public static string Replace(string input, string pattern, string replacement, RegexOptions options, TimeSpan matchTimeout); public static string[] Split(string input, string pattern, RegexOptions options, TimeSpan matchTimeout); 

 

Si sus necesidades de aplicación para manejar cualquier expresión regular (por ejemplo, en el cuadro de diálogo de búsqueda avanzada), asegúrese de utilizar este parámetro para evitar maliciosos expresión conduce regularmente a la computación infinita.

 

La compilación de una expresión regular

 

RegexOptions.Compiled Opción hará  Regex ejemplos de construcción ligera y generador de código de compilación de código dinámicamente expresión regular para una velocidad de juego mejorará en particular.

 

Los modificadores de patrones

 

Los modificadores patrón puede no sólo abierto, pero también cerrada. El siguiente ejemplo, para ignorar caso abierto, caso a continuación, cierre ignorando, el resultado de la casación  Aa.

 

Regex.Match("AAAa", "(?i)a(?-i)a").Value;    // Aa

 

Zero-anchura afirmación

 

Ahora escriba una contraseña utilizada para verificar el cumplimiento de los requisitos de las expresiones regulares, se requiere que contiene al menos un número.

 

Esto es muy simple, ya que

 

Regex.IsMatch("12345678", "\d");

 

Ahora añadir una condición, la longitud es mayor de seis. Parece que el uso regular no se puede lograr.

 

De hecho, es posible, con una afirmación de anchura cero  hacia delante primera afirmación  ella.

 

Adelante primera afirmación  (?=exp), que se utiliza generalmente para que coincida con el contenido antes de exp. Por ejemplo, el siguiente ejemplo, para eliminar el nombre, tienen que coincidir con el   contenido anterior.

 

Regex.Match("姓名张三,男,30 岁", "(?<=姓名).*?(?=,)").Value;  // 张三

 

De hecho, la comprensión correcta es: primera afirmación positiva, después de que el partido tiene éxito, será devuelto a la posición de partida, a continuación, después de que el juego continúe.

 

El punto más importante aquí es que después de que el partido de vuelta exitosa posición de partida, por lo que su interpretación es correcta, ex juez de las condiciones.

 

A continuación, el código de seguridad comprende al menos un número, y similares, para lograr una mayor longitud que 6:

 

Regex.IsMatch("abcde6", @"(?=.*\d).{6,}");

 

Añadimos un poco, los requisitos de contraseña difíciles cumplen las siguientes condiciones:

 

  • Al menos 8
  • Contienen al menos un número
  • Que comprende al menos una letra minúscula
  • Contener al menos una letra mayúscula

 

string pattern = @"(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}";
Regex.IsMatch("12345678", pattern);  // false
Regex.IsMatch("1234567a", pattern); // false Regex.IsMatch("123456aA", pattern); // true

 

Separar una cadena

 

La división de la cadena delimitador no se incluye en los resultados, al separador incluido en los resultados, se puede incluir en la expresión antes que la condición adelante.

 

foreach (string s in Regex.Split("oneTwoThree", "(?=[A-Z])")) Console.WriteLine(s); // one // Two // Three

 

paquete

 

Las expresiones regulares pueden \ n índice de referencia de sintaxis para el grupo de n.

 

var m = Regex.Matches("pop pope peep", @"\b(\w)\w+\1\b");

// pop
// peep

 

Llamado captura de sintaxis grupo:
(?'组名'表达式) o (?<组名>表达式)

 

Hacer referencia a un grupo denominado sintaxis:
\k'组名' o \k<组名>

 

Reemplazar texto y segmentación

 

cadena de reemplazo a través de  $0 acceso al partido original como una estructura alternativa. $1, $2 Acceso cualquier paquetes capturados. Para un grupo llamado, por  ${name} medio de una visita.

 

A todos los números se suman <>:

 

Console.WriteLine(Regex.Replace("1 + 11 = 12", @"\d+", @"<$0>"));
// <1> + <11> = <12>

 

Comisión MatchEvaluator

 

Replace El método tiene una sobrecarga, utilizando  MatchEvaluator delegado como un parámetro en lugar  replacement. La comisión se ejecutará una vez por cada partido, y devuelve el resultado de la misma utilizando el valor de reemplazo en la cadena original.

 

MatchEvaluator La definición delegado:

 

public delegate string MatchEvaluator(Match match);

 

Ejemplo:

 

Console.WriteLine(Regex.Replace("1 + 11 = 12", @"\d+", m => (int.Parse(m.Value) * 10).ToString()));

// 10 + 110 = 120

Supongo que te gusta

Origin www.cnblogs.com/Leo_wl/p/12503500.html
Recomendado
Clasificación