Что соответствуют этим шаблонам регулярных выражений? - PullRequest
1 голос
/ 23 мая 2009

Я новичок в регулярных выражениях в PHP и понимаю основные шаблоны, однако приведенные ниже являются немного сложными, и я не понимаю, что соответствует следующему шаблону:

$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#... "<a href='' rel='nofollow'></a>", $ret);

$ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*... "<a href='http://' rel='nofollow'></a>", $ret);

Может кто-нибудь объяснить, пожалуйста?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 23 мая 2009

Короче говоря: заменить URL-адреса на ссылки.

Подробно:

  1. Первое регулярное выражение описывает последовательности, которые начинаются с символов слова ([\w]+), затем следует ://, за которым следует один или несколько символов из набора [\w\#$%&~/.\-;:=,?@\[\]+].

    Вероятно, это должно соответствовать URL, начинающемуся с протокола / схемы URL, например http://, https:// или ftp://.

    Но это также будет соответствовать javascript://. И это не хорошо: javascript://%0Aalert%28%22booo%21%22%29 равно коду JavaScript:

    //
    alert("booo!")
    
  2. Второе регулярное выражение описывает последовательности, которые начинаются с www. или ftp., за которыми снова следует один или несколько символов набора [\w\#$%&~/.\-;:=,?@\[\]+].

    Вероятно, это должно соответствовать URL, которые начинаются с www. или ftp.. Протокол / схема URL затем добавляется к URL.

2 голосов
/ 23 мая 2009

Get RegexBuddy , и он объясняет вам ( см. Скриншоты ), что означает любое регулярное выражение. В SO есть еще один ответ, который демонстрирует, что .

В любом случае, согласно вторым аргументам preg_replace s, они должны соответствовать URL-адресам и маркировать их.

...