我有一些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_HOST
为origin-uk.blahblah.com
,则匹配为uk
。我编辑了上面的例子以更好地反映这一点。
编辑2:我也应该包括我这样做是PHP。
答案 0 :(得分:3)
试试这个:
(Origin-(www|uk)(\.(?:[a-zA-Z0-9](?:[_\-][a-zA-Z0-9]*)*)+)+\.com)
这将捕获您的两个示例,而不会捕获所有“不匹配”的示例。如果您需要更多或更少具体......或不同的东西,您需要澄清。
答案 1 :(得分:2)
哪种风格的正则表达式? 它是用PHP吗?
试试这个:
$pattern = '/^Origin\-([^\.]+)\./';
preg_match($_SERVER['HTTP_HOST'], $pattern, $m);
print $m[1];
答案 2 :(得分:2)
适用于您的一个正则表达式是\b[oO]rigin-(\w+)\b
。这是一个RegExr链接:http://regexr.com?35sq3。在此正则表达式中,组1包含您感兴趣的值。 \b
字段仅用于删除字符串中间的匹配项。如果您知道Origin
位于字符串的开头,则可以将第一个\b
替换为^
,将最后一个替换为$
答案 3 :(得分:1)
此正则表达式适用于子域:Origin-([a-z]{2}|www)
。对于完整的,它可以是:Origin-([a-z]{2}|www)\.blahblah\.com
您可以使用()来引用捕获组。
答案 4 :(得分:1)
在不知道更多参数的情况下,这将起作用 /产地 - ([A-ZA-Z *)\ ./
答案 5 :(得分:1)
首先,你要确保字符串的最开头是“origin”,所以从^
开始,这意味着字符串的开头。然后你会匹配任何文字,直到一个点。
/^origin-([a-z]+)\./