PHP регулярное выражение - PullRequest
       0

PHP регулярное выражение

1 голос
/ 17 февраля 2012

Я использую старую Joomla! Плагин (я знаю, первая ошибка). Это делает некоторую замену URL через регулярное выражение. Вот код:

$row->text = preg_replace_callback('@href=("|\')(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)("|\')@', 'replace_links', $row->text);

Проблема в том, что он разрывается с URL-адресами, в которых есть дефис. Любая помощь в том, как я могу изменить его, чтобы он мог воспринимать дефисы, была бы полезна.

Это также может быть функция replace_links, которая прерывается:

function replace_links($matches) {
$match = $matches[0];
$array = array('href=',"'", '"');
$match = str_replace($array, '',$match);

if (strpos($match, JURI::root())) {
    return $matches[0]; 
} else {    
    $plugin =& JPluginHelper::getPlugin('content', 'linkdisclaimer');
    $pluginParams   = new JParameter( $plugin->params );
    $id = $pluginParams->get('disclaimerPage');
    $match = "href=\"javascript:linkDisclaimer('".rawurlencode($match)."', '".$id."');\"";
    return $match;  
    }
}

1 Ответ

1 голос
/ 17 февраля 2012

Я пробовал это в тестере регулярных выражений, и он не совпадает с URL-адресами в них, поэтому я предполагаю, что это регулярное выражение.Попробуйте добавить символ - в регулярное выражение, например href=("|\')(https?://([-\w\.]+)+(:\d+)?(/([\w-/_\.]*(\?\S+)?)?)?)("|\').Это должно позволять - в сегменте пути после домена.Полная замена будет выглядеть как

$row->text = preg_replace_callback('@href=("|\')(https?://([-\w\.]+)+(:\d+)?(/([\w-/_\.]*(\?\S+)?)?)?)("|\')@', 'replace_links', $row->text);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...