2009-07-27 6 views

Respuesta

54

Probar:??

/(@|at)/ 

Esto significa que ya sea @ o at pero no ambos. También se captura en un grupo, por lo que luego puede acceder a la coincidencia exacta a través de una retro-referencia si así lo desea.

+0

¿manejaría esto los casos en que la dirección de correo electrónico sea algo como [email protected] o latitudeataddress.com? –

+0

¿Por qué no? ¿Qué quieres decir con "manejar"? –

+0

podría producir coincidencias falsas positivas es lo que estoy preguntando, supongo. –

32
/(?:@|at)/ 

La respuesta de los mmyers realizará una captura de paren; el mío no lo hará. Lo que debe usar depende de si desea la captura de paren.

+0

¿Es algún tipo de vistazo? No he encontrado "?:". Maldito google. – Qwerty

+3

@Qwerty: '(? :)' se está agrupando sin captura, en oposición a '()' que captura. – chaos

+0

@chaos ¡Maldición, gracias! – Qwerty

2

has necesitado

@|at 

que funciona para (en el sabor NET expresiones regulares) el siguiente texto

[email protected] johnsmithatgmail.com

+0

Esto también coincidirá con 'jonsmith @ atgmail.com' ¿Hay alguna manera de unir uno pero no ambos en una fila? Mi caso de uso es el enrutamiento para alguien con un apodo. Necesito hacer coincidir 'www.domain.com/name' y' www.domain.com/nickname' pero no 'www.domain.com/namenickname'. – Costa

3

si eso es sólo 2 cosas usted quiere capturar, no hay necesidad de regex

if (strpos($string,"@")!==FALSE || strpos($string,"at") !==FALSE) { 
    # do your thing 
} 
+1

Es cierto. Asumía que esto era parte de algo más grande, pero si no, probablemente sea mejor. –

Cuestiones relacionadas