你好,这是我的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
我知道应该使用正则表达式。只要我知道怎么做正则表达式,它就会好。谢谢
答案 0 :(得分:3)
$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
$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)
访问路径中的其他组件。