regular online net matches ismatch ejemplos c# .net regex perl

online - regex.ismatch c#



Traducir expresiones regulares de Perl a.NET (3)

Fueron diseñados para ser compatibles con expresiones regulares de Perl 5. Como tal, las expresiones regulares de Perl 5 deberían funcionar en .NET.

Puedes traducir algunas RegexOptions siguiente manera:

[Flags] public enum RegexOptions { Compiled = 8, CultureInvariant = 0x200, ECMAScript = 0x100, ExplicitCapture = 4, IgnoreCase = 1, // i in Perl IgnorePatternWhitespace = 0x20, // x in Perl Multiline = 2, // m in Perl None = 0, RightToLeft = 0x40, Singleline = 0x10 // s in Perl }

Otro consejo es usar cadenas textuales para que no necesites escapar de todos esos personajes de escape en C #:

string badOnTheEyesRx = "//d{4}///d{2}///d{2}"; string easierOnTheEyesRx = @"/d{4}//d{2}//d{2}";

Tengo algunas expresiones regulares útiles en Perl. ¿Hay una forma sencilla de traducirlos al dialecto de expresiones regulares de .NET?

Si no es así, ¿hay una referencia concisa de las diferencias?


Hay una gran tabla de comparación en http://www.regular-expressions.info/refflavors.html .

La mayoría de los elementos básicos son los mismos, las diferencias son:

Diferencias menores:

  • Secuencias de escape de Unicode. En .NET es /u200A , en Perl es /x{200A} .
  • /v en .NET es solo la pestaña vertical (U + 000B), en Perl representa la clase "espacio en blanco vertical". Por supuesto que hay /V en Perl debido a esto.
  • La expresión condicional para la referencia con nombre en .NET es (?(name)yes|no) , pero (?(<name>)yes|no) en Perl.

Algunos elementos son solo de Perl:

  • Cuantificadores posesivos ( x?+ , x*+ , x++ etc.). Utilice en su lugar subexpresión sin retroceso ( (?>…) ).
  • Secuencia de escape con nombre Unicode /N{LATIN SMALL LETTER X} , /N{U+200A} .
  • Caja plegable y escape.
    • /l (siguiente letra minúscula), /u (mayúscula siguiente carácter).
    • /L (minúscula), /U (mayúscula), /Q (comentar los metacaracteres) hasta /E
  • Notación abreviada de la propiedad Unicode /pL y /PL . Debe incluir las llaves en .NET, por ejemplo, /p{L} .
  • Cosas raras como /X , /C
  • Clases de caracteres especiales como /v , /V , /h , /H , /N , /R
  • Referencia a un grupo específico o anterior /g1 , /g{-1} . Solo se puede usar el índice de grupo absoluto en .NET.
  • Nombrada referencia de fondo /g{name} . Utilice /k<name> lugar.
  • Clase de caracteres POSIX [[:alpha:]] .
  • Patrón de reinicio de rama (?|…)
  • /K Use el look-behind ( (?<=…) ) En su lugar.
  • Afirmación de evaluación de código (?{…}) , subexpresión pospuesta (??{…}) .
  • Referencia de subexpresión (patrón recursivo) (?0) , (?R) , (?1) , (?-1) , (?+1) , (?&name) .
  • Algunos predicados de expresiones condicionales son específicos de Perl:
    • código (?{…})
    • recursivo (R) , (R1) , (R&name)
    • definir (DEFINE) .
  • Verbos de control de retroceso especiales (*VERB:ARG)
  • Sintaxis de Python
    • (?P<name>…) . Utilice (?<name>…) lugar.
    • (?P=name) . Utilice /k<name> lugar.
    • (?P>name) . No hay equivalente en .NET.

Algunos elementos son solo .NET:

  • Mirador de longitud variable. En Perl, para un look-behind positivo, use /K lugar.
  • Expresión regular arbitraria en expresión condicional (?(pattern)yes|no) .
  • Resta de clases de caracteres (¿no documentada?) [az-[dw]]
  • Grupo de equilibrio (?<-name>…) . Esto podría simularse con una aserción de evaluación de código (?{…}) seguida de un (?&name) .

Referencias:


Realmente depende de la complejidad de la expresión regular, muchos de ellos funcionarán de la misma forma.

Eche un vistazo a this hoja de trucos sobre expresiones regulares .NET para ver si un operador hace lo que usted espera que haga.

No conozco ninguna herramienta que se traduzca automáticamente entre los dialectos RegEx.