- $string = str_replace($from, $mid, $string); // Hide
- $string = preg_quote($string, $divider);
- $string = str_replace($mid, $to, $string); // Unhide
- return $string;
+ return 0; // Seems not IP
+ }
+}
+
+// Generate host (FQDN, IPv4, ...) regex
+// 'localhost' : Matches with 'localhost' only
+// 'example.org' : Matches with 'example.org', and 'www.example.org'
+// '.example.org' : Matches with ALL FQDN ended with '.example.org'
+// '*.example.org' : Almost the same of '.example.org' except 'www.example.org'
+// '10.20.30.40' : Matches with IPv4 address '10.20.30.40' only
+// '192168.' : Matches with all IPv4 hosts started with '192.'
+// TODO: IPv4, CIDR?, IPv6
+function generate_host_regex($string = '', $divider = '/')
+{
+ if (mb_strpos($string, '.') === FALSE)
+ return generate_glob_regex($string, $divider);
+
+ $result = '';
+ if (is_ip($string)) {
+ // IPv4
+ return generate_glob_regex($string, $divider);
+ } else {
+ // FQDN or something
+ $part = explode('.', $string, 2);
+ if ($part[0] == '') {
+ $part[0] = '(?:.*\.)?'; // And all related FQDN
+ } else if ($part[0] == '*') {
+ $part[0] = '.*\.'; // All subdomains/hosts only
+ } else {
+ return generate_glob_regex($string, $divider);
+ }
+ $part[1] = generate_glob_regex($part[1], $divider);
+ return implode('', $part);