用正则表达式匹配 URL
正则表达式一开始可能会让人望而生畏,但它们为不同的数据类型提供了强大的模式匹配功能。在提取 URL 的上下文中,需要一种灵活的模式来适应 URL 格式的变化。
一种强大的正则表达式,可以捕获带有或不带有领先协议的 URL(例如,“http://www”或“ www") 是:
((https?|ftp)://)? // Optional SCHEME ([a-z0-9+!*(),;?&=$_.-]+(:[a-z0-9+!*(),;?&=$_.-]+)?@)? // Optional User and Pass ([a-z0-9\-\.]*)\.(([a-z]{2,4})|([0-9]{1,3}\.([0-9]{1,3})\.([0-9]{1,3}))) // Host or IP address (:[0-9]{2,5})? // Optional Port (/([a-z0-9+$_%-]\.?)+)*/? // Path (\?[a-z+&$_.-][a-z0-9;:@&%=+/$_.-]*)? // Optional GET Query (#[a-z_.-][a-z0-9+$%_.-]*)? // Optional Anchor
要在 PHP 中使用此表达式,请将其用双引号括起来,并将其与要计算的 URL 一起传递给 preg_match 函数。例如:
<code class="php">$url = 'www.example.com/etcetc'; if (preg_match("~^$regex$~i", $url)) { echo 'Matched URL without protocol'; }</code>
同样,对于具有协议的 URL:
<code class="php">$url = 'http://www.example.com/etcetc'; if (preg_match("~^$regex$~i", $url)) { echo 'Matched URL with protocol'; }</code>
此模式应涵盖广泛的 URL 格式,同时还可以防止包含“”等字符的潜在恶意输入/”。
以上是如何使用正则表达式匹配URL?的详细内容。更多信息请关注PHP中文网其他相关文章!