我花了4个多小时试图在没有运气的情况下找到我的PHP代码的正则表达式。
我有一个带有html代码的字符串。 它有很多网址格式,如:
site*com
http://site*com
http://www*site*com
http://site*com/some.php
http://site*om/some.php?var1=1
http://site*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://site*com/asdad.php?var1=1&
(请注意,替换* with。我无法发布链接)
左边丢失了。
有人可以帮我添加丢失的部分吗?
非常感谢。
答案 0 :(得分:4)
好。最后我明白了:
最终的正则表达式代码是:
$regex = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i";
有效。
答案 1 :(得分:0)
检查可用于任何网址类型的这些模式
$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.
您可以忽略您可能不需要的任何部分。如你所见,我正在连接它们