PHP:将URL转换为正则表达式以匹配特定域

时间:2015-09-11 13:48:13

标签: php regex preg-match

我想将URL转换为正则表达式,以使其与当前URL匹配。例如,我有一个网址 http://www.example.com/example.php 我希望它转换为 的 ^(HTTPS://)?????(WWW \)例如\ .COM \ /示例\ .PHP /(\ ?. )(#)$ < /强>

所以我存储它,每当用户点击附加了任意数量参数的url时,我会将该url与我的正则表达式匹配,并根据结果执行一些操作。

我发现了许多问题,但它们要么与一般网址(使用任何域名)匹配,要么与给定的正则表达式匹配。但我想要一个我将传递URL的函数,它将返回其正则表达式,我将使用它来匹配该特定域。

1 个答案:

答案 0 :(得分:0)

我终于在stackoverflow和其他社区的帮助下创建了这段代码。这为我提供了针对给定URL的确切字符串。

<?php 
    function createrRegex($url) {
        $var1 = '^(https?://)?';
        $host = parse_url($url, PHP_URL_HOST);
        $host_parts = explode('.', $host);
        if (!empty($host_parts)) {
            $length = count($host_parts);
            foreach ($host_parts as $i => $part) {
                if ($i == 0) {
                    if ($part == "www") {
                        $var1 .= '(' . $part . '\\\\.)?';
                    } else {
                        $var1 .= '' . $part;
                        $var1 .= ($i < ($length - 1)) ? '\\\\.' : '';
                    }
                } else {
                    $var1 .= '' . $part;
                    $var1 .= ($i < ($length - 1)) ? '\\\\.' : '';
                }
            }
        }
        $path = '';
        if ((parse_url($url, PHP_URL_PATH) != NULL)) {
            $path = str_replace('/', '\\\\/', parse_url($url, PHP_URL_PATH));
            $path = str_replace('.', '\\\\.', $path);
        }
        $var1 .= $path;
        $var1 .= '/?(\\\\?.*)?(#.*)?$';
        return $var1;
    }
?>