2009-07-27 14 views

Odpowiedz

54

Spróbuj:?

/(@|at)/ 

Oznacza to albo @ lub at ale nie oba. Jest także przechwytywany w grupie, więc możesz później uzyskać dostęp do dokładnego dopasowania poprzez odwołanie wstecz, jeśli chcesz.

+0

Czy to przypadki, w których adres e-mail jest podobny do [email protected] lub latitudeataddress.com? –

+0

Dlaczego by nie? Co masz na myśli przez "uchwyt"? –

+0

Czy przyniosłoby to fałszywe pozytywne wyniki, to jest to, o co pytam. –

32
/(?:@|at)/ 

Odpowiedź mmyersa wykona przechwycenie paren; moje nie. To, czego powinieneś użyć, zależy od tego, czy chcesz przechwycić paren.

+0

Czy to jakieś obejście? Nie znalazłem "?:". Cholerny google. – Qwerty

+3

@Qwerty: '(? :)' grupuje bez przechwytywania, w przeciwieństwie do '()', które przechwytuje. – chaos

+0

@chaos Cholera, dzięki! – Qwerty

2

próbowałeś

@|at 

który pracuje dla (w smaku .NET regex) Poniższy tekst

[email protected] johnsmithatgmail.com

+0

To również będzie pasować do 'jonsmith @ atgmail.com' Czy istnieje sposób na dopasowanie jednego, ale nie obu w jednym rzędzie? Mój przypadek użycia jest routing dla kogoś z pseudonimem. Muszę dopasować 'www.domain.com/name' oraz' www.domain.com/pseudonim', ale nie 'www.domain.com/nazwaNazwaNiki'. – Costa

3

jeśli to tylko 2 rzeczy chcesz przechwycić, nie ma potrzeby wyrejestrowania

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

Prawda. Zakładałem, że jest to część czegoś większego, ale jeśli nie, prawdopodobnie jest to lepsze. –

Powiązane problemy