Регулярка для url под любые языки мира

Тема в разделе "Регулярные выражения", создана пользователем verfaa, 8 авг 2016.

Метки:
Модераторы: xpert13
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    375
    Симпатии:
    41
    Всем привет.
    На сайте использовалась регулярка для url вида http://domen.com/themename/pagename.html

    Для pagename использовалась регулярка вида
    ([a-z0-9\\-/]+)
    т.е. предполагалось что pagename будет состоять из английских букв, цифр, тире, может быть слэш.
    Однако теперь необходимо её переписать с допущением, что pagename может быть на любом языке мира - английском, русском, французком, испанском и т.д. Подскажите как лучше всего составить регулярное выражение.
    Версия PHP на сервере 5.6.24
     
  2. Tonne

    Tonne Создатель

    Заблокирован
    Регистр.:
    17 июл 2012
    Сообщения:
    39
    Симпатии:
    57
    Такая может подойдет, удалял ссылки в свое время с контента
    (http|ftp|https:\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
     
  3. kreg1g

    kreg1g Писатель

    Регистр.:
    6 июн 2012
    Сообщения:
    6
    Симпатии:
    2
    Код:
    ~^(?:(?:https?|ftp|telnet:(//(?:[a-z0-9_-]{1,32}(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:ru|su|com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{5})|(?!0)(?:(?!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&?+=\~/-]*)?(?:#[^ '\"&]*)?$~i
    
    Если нужно распознавать и кириллические домены, необходимо изменить все «a-z0-9» на «а-яёa-z0-9» и добавить в список доменных зон «рф»
     
  4. antonixus

    antonixus Постоялец

    Регистр.:
    18 июл 2016
    Сообщения:
    55
    Симпатии:
    36
    Используй поддержку Юникода, unicode character class "\pL"
    Примерно так:
    Код:
    /([a-zA-Z0-9\pL]+)/ug
    Проверяем:
    https://regex101.com/r/hOn0Os/1