Expresiones regulares más entendibles en .NET
Por: | 30 Abril 2007 |
Seguramente más de uno que ha tenido la oportunidad de revisar código ajeno donde se hacía uso de expresiones regulares, sufrió de algún modo para entender algunos patrones; esto sucede generalmente porque pocos suelen poner nombres a los grupos que definen y menos aún usan comentarios dentro de los patrones.
El siguiente ejemplo ilustra de manera básica un patrón confuso:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
string patern = @"(https?://)([a-z\d-]+\.)*([a-z\d-]+)((\.[a-zA-Z]+){1,2})(/.*$)?";
RegexOptions options = RegexOptions.IgnoreCase;
Match match = Regex.Match("http://google.com", pattern, options);
foreach (Group group in match.Groups)
{
Console.WriteLine(group.Value);
}
}
}Ese mismo ejemplo, usando la opción RegexOptions.IgnorePatternWhitespace permite entender más fácilmente la expresión regular mostrada:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
string pattern = @"
(?# Ejemplo de comentario: captura el protocolo http o https incluyendo ://)
(?<protocol>https?://)
(?<subDomain>[a-z\d-]+\.)*
# Algún otro comentario relevante #
(?<domain>[a-z\d-]+)
(?<TLD>(\.[a-zA-Z]+){1,2})
(?<requestUri>/.*$)?
";
RegexOptions options = RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase;
Match match = Regex.Match("http://google.com", pattern, options);
foreach (Group group in match.Groups)
{
Console.WriteLine(group.Value);
}
}
}Como se puede apreciar, el segundo ejemplo da una idea más clara de lo que captura el patrón definido.
Si desarrollan en .NET y usan expresiones regulares, no hay excusas para hacer sufrir a los que revisan o dan mantenimiento al código que hicieron

