/ / Dlaczego to wyrażenie wyrażenia regularnego nie składa się z JUSTa? - regex

Dlaczego to wyrażenie regex nie wyodrębnia się TYLKO w e-mailu? - regex

http://regexr.com/3a8dc

Próbuję parsować plik vCard dla małego narzędzia osobistego potrzebnego do mojej pracy. w tym przykładzie próbuję dopasować tylko adres e-mail. Wiersz w pliku wygląda następująco:

EMAIL;PREF;INTERNET:MikeSmith@FastFoodInc.com

Mój Regex wygląda następująco:

(?:^EMAIL;PREF;INTERNET:)(w+@w+.w+)n

Jeśli się nie mylę, mam nie pasującą grupę i pasującą grupę.

(?:^EMAIL;PREF;INTERNET:)

Czy nie powinno to pasować, ale nie uchwycić grupy zaczynającej się od "(?:^EMAIL;PREF;INTERNET:)"a następnie druga grupa powinna zostać przechwycona? Przechwytywam całą linię.

Odpowiedzi:

1 dla odpowiedzi № 1

Używasz dopasowywania i przechwytywania do tyłu. Dopasowane odnosi się do całości tekstu, który pasuje do wzorca, a przechwycone odnosi się do części w parens, więc nie próbujesz mecz tylko e-mail, próbujesz zdobyć tylko e-mail. Twój wzór pasuje do całej linii, co pokazuje nam regexr.com. Jeśli następnie przejrzysz przechwyconą część, zobaczysz, że zawiera ona to, czego się spodziewasz.

Ponadto nie ma potrzeby grupowania pierwszej sekcji, jeśli nie zamierzasz jej przechwycić, możesz więc użyć:

^EMAIL;PREF;INTERNET:(w+@w+.w+)n

A jeśli wiesz, że tylko adres e-mail podąża za tą etykietą, czy możesz dalej skrócić:

^EMAIL;PREF;INTERNET:(.+)$