Pregunta

Realmente me gustaría usar W, pero también coincide con los subrayadores, así que voy con [A-ZA-Z] que se siente innecesariamente detallado y en Estados Unidos centrados. ¿Hay una mejor manera de hacer esto? ¿Algo como [ w^_] (dudo que tengo esa sintaxis correcta)?

¿Fue útil?

Solución

Podrías usar /[a-z]/i o /[[:alpha:]]/ igual de bien. En realidad, \w Incluye números para que ni siquiera funcione.

Otros consejos

Quizás te refieras /[[:alpha:]]/? Ver perlre Para la discusión de las clases de personajes de Posix.

Solo usa \p{L} lo que significa "cualquier carta unicode" y funciona en Perl (/\p{L}/). Probablemente necesite use utf8;.

Los personajes internacionales coincidentes (es decir, no ASCII) es un poco difícil y podrían depender de muchas cosas. Mira este ejemplo:

#!perl -w

use strict;
use utf8;

my $string = "ä";

print "matched :alpha:\n"  if $string =~ /[[:alpha:]]/;
print "matched ^\\W0-9_\n" if $string =~ /[^\W0-9_]/;
print "matched [a-zA-Z]\n" if $string =~ /[a-zA-Z]/;
print "matched [a-z]i\n"   if $string =~ /[a-z]/i;
print "matched [A-z]\n"    if $string =~ /[A-z]/;

Para mi resulta en

matched :alpha:

Si elimina el use utf8 Entonces ninguna de las expresiones regulares coincide.

Mirando a Esta pregunta muy relevante, parece que probablemente quieras use utf8 Y mira Unicode :: semántica.

Por supuesto, si está utilizando caracteres ASCII directos, cualquiera de las expresiones regulares antes mencionadas funcionará.

[^\W0-9_]

# or

[[:alpha:]]

Ver PERLDOC perlre

Algunas opciones:

1. /[a-z]/i               # case insensitive
2. /[A-Z]/i               # case insensitive
3. /[A-z]/                # explicit range listing (capital 'A' to lowercase 'z')
4. /[[:alpha:]]/          # POSIX alpha character class

Recomiendo usar la forma de caso, o la verdadera forma /[a-zA-z]/, a menos que tenga una determinada preferencia de lenguaje en mente.

Nota:

  • El número 3 requiere la capital 'A' primero y luego 'z' en minúsculas debido al orden de los valores ASCII; No funciona si haces lo contrario: a-Z. También: Este método fallaría los criterios sin concurridos, ya que incluye [ \ ] ^ _ ` .
  • El número 4 coincidirá con esos caracteres de idioma adicional, pero también coincide con:
    ʹʺʻˍˎˏːˑˬˮ̀́ (además muchos otros)

¿Estás buscando internacionalización en tu regex? Entonces tendrás que hacer algo como este tipo: Problema de validación de JavaScript con caracteres internacionales

coincidir explícitamente en todas las letras lingüísticas de la luna :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top