2009-07-27 7 views

Répondre

54

Essayez:?

/(@|at)/ 

Cela signifie soit @ ou at mais pas les deux. Il est également capturé dans un groupe, de sorte que vous pouvez accéder plus tard à la correspondance exacte via une référence arrière si vous le souhaitez.

+0

Est-ce que cela traiterait des cas où l'adresse e-mail est quelque chose comme [email protected], ou latitudeataddress.com? –

+0

Pourquoi pas? Que voulez-vous dire par "gérer"? –

+0

produirait-il des faux positifs? C'est ce que je demande, je suppose. –

32
/(?:@|at)/ 

La réponse de mmyers effectuera une capture de paren; le mien ne le fera pas. Ce que vous devez utiliser dépend de si vous voulez la capture paren.

+0

Est-ce une sorte de lookaround? Je n'ai pas trouvé "?:". Merde google. – Qwerty

+3

@Qwerty: '(? :)' est un regroupement sans capture, contrairement à '()' qui capture. – chaos

+0

@chaos Merde, merci! – Qwerty

2

Avez-vous essayé

@|at 

qui fonctionne pour (la saveur regex .NET) le texte suivant

[email protected] johnsmithatgmail.com

+0

Cela correspondra également 'jonsmith @ atgmail.com' Y a-t-il un moyen de faire correspondre l'un ou l'autre mais pas les deux à la fois? Mon cas d'utilisation est le routage pour quelqu'un avec un surnom. J'ai besoin de faire correspondre 'www.domain.com/name' et' www.domain.com/pseudo'' mais pas 'www.domain.com/namenickname'. – Costa

3

si c'est seulement 2 choses vous voulez capturer, pas besoin regex

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

True. Je supposais que cela faisait partie de quelque chose de plus grand, mais sinon, c'est probablement mieux. –

Questions connexes