Соответствие тире в регулярном выражении URL - PullRequest
2 голосов
/ 02 декабря 2008

Я использовал следующее регулярное выражение для получения URL-адресов из текста (например, "this is text http://url.com/blabla possibly some more text").

'@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@'

Это работает для всех URL, но я только что обнаружил, что это не работает для сокращенных URL, например: "blabla bla http://ff.im/-bEnA blabla" становится http://ff.im/ после совпадения.

Я подозреваю, что это связано с чертой - после косой черты /.

1 Ответ

5 голосов
/ 02 декабря 2008

Краткий ответ: [\w/_\.] не соответствует -, поэтому сделайте это [-\w/_\.]

Длинный ответ:

@              - delimiter
(              - start of group
    https?://  - http:// or https://
    ([-\w.]+)+ - capture 1 or more hyphens, word characters or dots, 1 or more times.. this seems odd - don't know what the second + is for
    (:\d+)?    - optionally capture a : and some numbers (the port)
    (          - start of group
        /            - leading slash
        (            - start of group
            [\w/_\.] - any word character, underscore or dot - you need to add hyphen to this list or just make it [^?\S] - any char except ? or whitespace (the path + filename)
            (\?\S+)? - optionally capture a ? followed by anything except whitespace (the querystring)
        )?     - close group, make it optional
    )?         - close group, make it optional
)              - close group
@               
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...