使用php查找字符串中的所有子域

时间:2014-07-21 00:01:21

标签: php regex

你好,这是我的HTML:

<div>
hello.domain.com
holla.domain.com
stack.domain.com
overflow.domain.com </div>

我想返回一个数组:hello, holla, stack,overflow

然后我有https://hello.domain.com/c/mark?lang=fr 我想返回值:mark 我知道应该使用正则表达式。只要我知道怎么做正则表达式,它就会好。谢谢

4 个答案:

答案 0 :(得分:3)

第1部分:子域名

$regex = '~\w+(?=\.domain\.com)~i';
preg_match_all($regex, $yourstring, $matches);
print_r($matches[0]);

查看the regex demo中的匹配项。

匹配数组:

[0] => hello
[1] => holla
[2] => stack
[3] => overflow

<强>解释

  • i修饰符使其不区分大小写
  • \w+匹配字母,数字或下划线(我们的匹配)
  • 前瞻(?=\.domain\.com)断言它后跟.domain.com

第2部分:子串

$regex = '~https://hello\.domain\.com/c/\K[^\s#?]+(?=\?)~';
if (preg_match($regex, $yourstring, $m)) {
    $thematch = $m[0];
    } 
else { // no match...
     }

查看the regex demo中的匹配项。

<强>解释

  • https://hello\.domain\.com/c/匹配https://hello.domain.com/c/
  • \K告诉引擎放弃与其返回的最终匹配项目匹配的内容
  • [^\s#?]+匹配任何不是空格字符的字符,?#网址片段标记
  • 前瞻(?=\?)断言后面跟着?

答案 1 :(得分:0)

虽然我不确定你想把它带到哪里。

$input = 'somthing.domain.com';

$string = trim($input, '.domain.com');

可以帮到你。

答案 2 :(得分:0)

关于问题的第二部分,您可以使用parse_url功能:

$yourURL = 'https://hello.domain.com/c/mark?lang=fr';

$result = end(explode('/', parse_url($yourURL, PHP_URL_PATH)));

答案 3 :(得分:0)

对于问题的第二部分(提取URL的一部分),其他人已经使用高度特定的正则表达式解决方案进行了回答。更一般地说,您要做的是解析已存在parse_url()函数的URL。您会发现以下内容更灵活,适用于其他网址:

php > $url = 'https://hello.domain.com/c/mark?lang=fr';
php > $urlpath = parse_url($url, PHP_URL_PATH);
php > print $urlpath ."\n";
/c/mark
php > print basename($urlpath) . "\n";
mark
php > $url = 'ftp://some.where.com.au/abcd/efg/wow?lang=id&q=blah';
php > print basename(parse_url($url, PHP_URL_PATH)) . "\n";

这假设您处于URL路径的最后一部分之后,但您可以使用explode("/", $urlpath)访问路径中的其他组件。