2015-03-02 3 views
0

Я сопоставляю для части имени пользователя в URL-адресах профиля Twitter - например. http://www.twitter.com/joebloggsregex, чтобы соответствовать любой из форм URL-адреса

В настоящее время я успешно использую http://www.twitter.com/ (\ W +)

Но, в некоторых случаях исходных URL-адрес в формате http://www.twitter.com/@joebloggs

Это не нужно, но мне еще нужно найти " joebloggs "все равно. Поэтому мне нужно сопоставить либо формат без @, либо с помощью @.

Я пробовал различные методы, используя трубу или вертикальную планку.

Спасибо.

ответ

2

Вы можете сделать @ дополнительно с помощью:

^http:\/\/www\.twitter\.com\/@?(\w+) 

Объяснение:

^   # match start of input 
http:  # match literal http:// 
\/\/   # match 2 // (escaping is needed for some regex engines) 
www   # match literal www 
\.   # match literal dot (escaping since dot is special meta char) 
twitter\.com # match literal twitter.com 
\/   # match literal/
@?   # match optional @ 
(\w+)  # match 1 or more word characters and group it 
+2

Если вы берете @ из захвата, то он всегда будет получить "joebloggs" (независимо от того, наличие @): '^ http: \/\/www \ .twitter \ .com \/@? (\ w +)' – nils

+0

Я не был уверен, что '@' должно быть в захваченном тексте или нет , Но да, я согласен, что если намерение всегда захватывает 'joebloggs', тогда регулярное выражение должно быть:'^http: \/\/www \ .twitter \ .com \/@ (? \ W +) ' – anubhava

+0

С первым ответом матчи закончились в том числе @. Мне нужно это _stripped_, где оно находится в URL-адресе. Вторые ответы работают. Спасибо. Как я могу понять, что происходит в regex здесь ...? 1)^соответствует тому, где http://www.twitter.com/ - начало строки? 2) Вам нужно избегать периода? 3) Я не полностью понимаю логику @ (? \ W +) –