Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php查找字符串中的所有子域_Php_Regex - Fatal编程技术网

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

使用php查找字符串中的所有子域,php,regex,Php,Regex,你好,这是我的html: <div> hello.domain.com holla.domain.com stack.domain.com overflow.domain.com </div> 你好,域名 holla.domain.com stack.domain.com overflow.domain.com 我想返回一个数组:hello,holla,stack,overflow 然后我有了这个https://hello.domain.com/c/mark?lan

你好,这是我的html:

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

你好,域名
holla.domain.com
stack.domain.com
overflow.domain.com
我想返回一个数组:
hello,holla,stack,overflow

然后我有了这个
https://hello.domain.com/c/mark?lang=fr
我想返回值:
mark
我知道这应该用正则表达式来完成。只要我知道如何使用正则表达式或不使用正则表达式就好了。谢谢你

第1部分:子域 在中查看比赛

匹配数组:

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

  • i
    修饰符使其不区分大小写
  • \w+
    匹配字母、数字或下划线(我们的匹配)
  • 前瞻
    (?=\.domain\.com)
    断言它后面跟着
    .domain.com
第2部分:子字符串 看比赛

解释

  • https://hello\.domain\.com/c/
    匹配
    https://hello.domain.com/c/
  • \K
    告诉引擎放弃与其返回的最终匹配项相距甚远的匹配项
  • [^\s#?]+
    匹配任何非空白字符、
    #
    url片段标记的字符
  • 前瞻
    (?=\?)
    断言它后面跟着一个

尽管我不确定你想把这个带到哪里

$input = 'somthing.domain.com';

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

可能会对您有所帮助。

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

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

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

对于您问题的第二部分(提取URL的一部分),其他人已经用非常具体的正则表达式解决方案回答了。更一般地说,您要做的是解析一个已经存在函数的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)
访问路径中的其他组件。

FYI:为每个模式添加了regex演示+解释。:)谢谢,很高兴能帮上忙。:)的第二个参数是
字符串$character\u mask
。此imho只修剪任何
.acdiomn
并在
g
处停止,因为它不在charlist中。
$yourURL = 'https://hello.domain.com/c/mark?lang=fr';

$result = end(explode('/', parse_url($yourURL, PHP_URL_PATH)));
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";