web-dev-qa-db-fra.com

Comment faites-vous correspondre l'un des deux mots dans une expression régulière?

Je veux faire correspondre soit @ ou «à» dans une regex. Quelqu'un peut aider? J'ai essayé d'utiliser le? opérateur, me donnant/@? (at)?/mais cela n'a pas fonctionné

33
Adrian Sarli

Essayer:

/(@|at)/

Cela signifie soit @ ou at mais pas les deux. Elle est également capturée dans un groupe afin que vous puissiez accéder ultérieurement à la correspondance exacte via une référence arrière si vous le souhaitez.

57
Michael Myers
/(?:@|at)/

la réponse de mmyers effectuera une capture paren; le mien non. Ce que vous devez utiliser dépend de si vous voulez ou non la capture de paren.

34
chaos

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

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

as-tu essayé 

@|at

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

[email protected]

2
Josh E

Qu'en est-il de:

^(\w*(@|at))

Pour:

  • johnsmith @ gmail.com
  • johnsmithat gmail.com
  • jonsmith @ atgmail.com
0