Почему я получаю эту группу RegEx? - PullRequest
1 голос
/ 20 марта 2012

Я кодировал этот RegEx для извлечения писем:

(\w+)\s*(?:@|(at)|(\s*at\s*)|(\(at\)))\s*((\w+)(?:\.|\s*dot\s*)(\w+)*(?:\.|\s*dot\s*)*)+com

Мои требования состоят в том, что доменные имена могут иметь две формы: domain.com или sub.domain.com

Запускпоказать, что общее количество групп составляет 7

Для:
user@domain.com
Группа 0, user@domain.com
Группа 1, пользователь
Группа 2, ноль
Группа 3, ноль
Группа 4, ноль
Группа 5, домен.
Группа 6, домен

Почему я получаю эту "кластеризацию"?Все, что я хочу, это извлечь имя пользователя и домен.

1 Ответ

0 голосов
/ 20 марта 2012

Каждая пара в скобках добавляет новую группу в ваш шаблон. Просто вам не нужны все из них. Я пробовал это выражение:

(\w+[\.\w+]*)\s*(?:@|at|\s*at\s*|\(at\))\s*(\w+(?:\.|\s*dot\s*)\w+*(?:\.|\s*dot\s*)*)+com

Это соответствует правильно:

john.smith@sub.domain.com
\1: john.smith
\2: sub.domain

john.smith@domain.com
\1: john.smith
\2: domain

и

johnsmith@domain.com
\1: johnsmith
\2: domain
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...