我花了4个多小时试图找到我的php代码的正则表达式,但是没有运气。
我有一个带html代码的字符串。它具有许多网址格式,例如:
example.com
http://example.com
http://www.example.com
http://example.com/some.php
http://example.com/some.php?var1=1
http://example.com/some.php?var1=1&var2=2
etc.
我有以下php代码部分起作用:
preg_match_all('/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $content, $result, PREG_PATTERN_ORDER);
[我唯一需要做的是还使用“&”捕获具有多个查询字符串的网址我得到它们,但不完整,我只收到类似以下内容:
http://example.com/asdad.php?var1=1&
左边丢了。
有人可以帮助我将丢失的部分添加到图案中吗?
非常感谢。
嗯。终于我明白了:
最终的正则表达式代码为:
$regex = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i";
有效。
检查这些可用于任何URL类型的模式
$regex = "((https?|ftp)\:\/\/)?"; // Checking scheme
$regex .= "([a-z0-9-.]*)\.([a-z]{2,3})"; // Checking host name and/or IP
$regex .= "(\:[0-9]{2,5})?"; // Check it it has port number
$regex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; // The real path
$regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; // Check the query string params
$regex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?"; // Check anchors if are used.
您可以忽略任何不需要的部分。如您所见,我正在串联它们