Регулярное выражение для получения имени пользователя из сообщений - PullRequest
0 голосов
/ 20 мая 2010

У меня есть два возможных строковых ввода, которые получит мое приложение, и если оно соответствует следующим двум строкам, мне нужно, чтобы regex.ismatch () возвращало true:

"User * has logged out"
"User * has joined"

Я не так хорош в регулярных выражениях и просто не могу понять, как добиться соответствия вышеприведенному.

Любая помощь была бы великолепна !!!

Ответы [ 2 ]

3 голосов
/ 20 мая 2010

Предполагая, что вы хотите сопоставить * буквально как звездочку, вам нужно экранировать его с предшествующим \ следующим образом.

@"^User \* has (logged out|joined)$"

Если под * вы подразумеваете «любое имя пользователя», то замените его либо регулярным выражением, которое вы используете для проверки своих имен пользователей, либо из-за отсутствия чего-либо лучшего, вы всегда можете использовать только .*.

Конструкция (logged out|joined) называется «чередование». Окружающие скобки, в дополнение к обеспечению приоритета при чередовании в этом случае, также включают в группу 1 либо строку "logged out", либо "joined", в зависимости от того, какое чередование соответствует.

Если вам не нужно различать два события, тогда вам не нужно захватывать эту строку, и вы можете использовать группу без захвата (?:logged out|joined) для небольшого прироста производительности.

^ и $ - это так называемые якоря, которые соответственно соответствуют началу и концу строки. Правильное размещение этих якорей в шаблоне гарантирует, что он соответствует всей входной строке, а не только подстроке.

регулярные ссылки-info.info Ссылки

1 голос
/ 20 мая 2010

Предполагается, что * будет именем пользователя:

"User .+ has (joined|logged out)"

или, может быть, что-то вроде этого (может потребоваться больше символов в имени пользователя):

"User [A-Za-z0-1_]+ has (joined|logged out)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...