1

我有一些 URI 进入,我需要捕获在子域中具有“origin-xx”的任何 URI,并且仅在子域中。我希望返回的匹配等于通配符('xx')。

火柴:

  • Origin-www.blahblah.com

    $match[0] = 'www'

  • Origin-uk.blahblah.com

    $match[0] = 'uk'

不匹配:

  • www.blahblah.com
  • www.origin.blahblah.com
  • www.blahorigin-blah.com
  • uk.blahblah.com

提前致谢。

编辑:我说得不是很好。匹配应该只是通配符。所以如果HTTP_HOSTorigin-uk.blahblah.com匹配的话uk。我已经编辑了上面的示例以更好地反映这一点。

编辑 2:我还应该包括我正在做的事情是 PHP。

4

6 回答 6

3

尝试这个:

(Origin-(www|uk)(\.(?:[a-zA-Z0-9](?:[_\-][a-zA-Z0-9]*)*)+)+\.com)

正则表达式可视化

在 Debuggex 上查看

这将捕获您的两个示例,而不是捕获所有“不匹配”示例。如果您需要或多或少具体的东西......或不同的东西,您需要澄清。

于 2013-08-08T18:19:54.573 回答
2

哪种风格的正则表达式?是在 PHP 中吗?

尝试这个:

$pattern = '/^Origin\-([^\.]+)\./';
preg_match($_SERVER['HTTP_HOST'], $pattern, $m);
print $m[1];
于 2013-08-08T18:19:40.287 回答
2

一个适合您的正则表达式是\b[oO]rigin-(\w+)\b. 这是一个 RegExr 链接:http ://regexr.com?35sq3 。在此正则表达式中,第 1 组包含您感兴趣的值。这些\b字段只需要删除字符串中间的匹配项。如果您知道这Origin将位于字符串的开头,则可以将第一个替换为\b^最后一个替换为$

于 2013-08-08T18:24:21.273 回答
1

在不知道更多参数的情况下,这将起作用 /Origin-([a-zA-Z*?)\./

于 2013-08-08T18:17:23.843 回答
1

此正则表达式适用于子域:Origin-([a-z]{2}|www). 对于完整的,它可以是这样的:Origin-([a-z]{2}|www)\.blahblah\.com

您可以使用 ( ) 来引用捕获组。

于 2013-08-08T18:15:04.217 回答
1

所以首先,你要确保字符串的开头是“origin”,所以以 a^开头,这意味着字符串的开头。然后你会匹配任何文本,最多一个点。

/^origin-([a-z]+)\./
于 2013-08-08T18:19:28.210 回答