J'ai cette regex qui fonctionne très bien mais pas dans tous les scénarios, par exemple si j'ai une longue url dire "http://www.gob.cl/especiales/politicas-y-propuestas-de -accion-para-el-desarrollo-de-la-educacion-chilena/"il me rendra seulement" http: //www.gob. " dans le cadre de l'urlRegex pour analyser les longues URL
Voici mon code
$regexUrl = "((https?|ftp)\:\/\/)?"; // SCHEME $regexUrl .= "([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;?&=\$_.-]+)[email protected])?"; // User and Pass $regexUrl .= "([a-zA-Z0-9-]+)\.([a-zA-Z]{2,3})"; // Host or IP $regexUrl .= "(\:[0-9]{2,5})?"; // Port $regexUrl .= "(\/([a-zA-Z0-9+\$_-]\.?)+)*\/?"; // Path $regexUrl .= "(\?[a-zA-Z+&\$_.-][a-zA-Z0-9;:@&%=+\/\$_.-]*)?"; // GET Query $regexUrl .= "(#[a-zA-Z_.-][a-zA-Z0-9+\$_.-]*)?"; // Anchor //if(preg_match_all("#\bhttps?://[^\s()]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#", $message, $matches1, PREG_PATTERN_ORDER)) //$pattern = '/((https?|ftp)\:(\/\/)|(file\:\/{2,3}))?(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(((([a-zA-Z0-9]+)(\.)?)+)(\.)(com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|[a-z]{2}))([\/][\/a-zA-Z0-9\.]*)*([\/]?(([\?][a-zA-Z0-9]+[\=][a-zA-Z0-9\%\(\)]*)([\&][a-zA-Z0-9]+[\=][a-zA-Z0-9\%\(\)]*)*))?/'; if(preg_match_all("/$regexUrl/", $urlMessage, $matches1, PREG_PATTERN_ORDER)) { try { foreach($matches1[0] as $urlToTrim1) { $url= $urlToTrim1; echo $url; } } catch(Exception $e) { $url="-1"; } }
il y avoir une expression rationnelle générique qui peut analyser toutes sortes de urls.
pourquoi cette baisse voté par curiosité? – Chamilyan
(1) '(?: Http | https)' est inutilement prolixe et inefficace; 'https?' fonctionne très bien. (2) '/' n'a besoin d'être échappé que si vous utilisez '/' comme délimiteur de regex; il y a beaucoup d'autres options. (3) L'échappement double n'est pas nécessaire si vous utilisez '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '. pas un opérateur "OR", il correspond juste à un | | '(le" OU "est implicite). (5)' [/.]? 'est inutile de toute façon, puisque' [^ \ s "] *' correspond à la fois personnages. (6) Il n'est pas nécessaire d'envelopper toute la regex dans '()'. (...) Je pourrais continuer ...;) –
Ouais mais ça marche;) tout va bien. – Chamilyan