猿问

RegEx 模式不起作用:在 PHP 中匹配域名的最后一部分之后的所有内容

我想在 url 的特定部分之后匹配所有内容,但我无法让这个 regEx 工作:


$url = 'http://mywebsite.online/noticia/mi-noticia-copada';

$regexPattern =  '/^online(.*?)/';

preg_match($regexPattern, $eliminar, $matches);

我在 $matches 中得到一个空数组。


我有这个字符串:


http://mywebsite.online/noticia/mi-noticia-copada


我想得到这个:


noticia/mi-noticia-copada


我有另一个示例字符串:


http://mywebsite.online/mi-otra-noticia-copada


我想得到这个:


mi-otra-noticia-copada


到目前为止,我读过的例子都不起作用。


12345678_0001
浏览 174回答 2
2回答

跃然一笑

您的问题是您已使用 将正则表达式锚定到字符串的开头^,因此它只会匹配以online. 您可以更改您的正则表达式以匹配.online域名的结尾:$url = 'http://mywebsite.online/noticia/mi-noticia-copada';$regexPattern =  '#^https?://[^/]+\.online/(.*)$#';preg_match($regexPattern, $url, $matches);echo $matches[1] . PHP_EOL;$url = 'http://mywebsite.online/mi-otra-noticia-copada';preg_match($regexPattern, $url, $matches);echo $matches[1];输出:noticia/mi-noticia-copadami-otra-noticia-copada

拉莫斯之舞

此表达式可能会返回所需的输出:^https?:\/\/(?:www\.)?(?:[\w]+\.[\w]+)*\/(.*)$如果你想探索/简化/修改表达式,它已在regex101.com 的右上角面板中进行了 解释。如果您愿意,您还可以在此链接中观看它如何与某些示例输入匹配。测试$re = '/^https?:\/\/(?:www\.)?(?:[\w]+\.[\w]+)*\/(.*)$/m';$str = 'http://mywebsite.online/noticia/mi-noticia-copadahttp://mywebsite.online/mi-otra-noticia-copadahttp://mywebsite.onlinem.ywebsite.online/noticia/mi-noticia-copadahttp://mywebsite.online/mi-otra-noticia-copadahttps://www.mywebsite.online/mi-otra-noticia-copada';preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);var_dump($matches);
随时随地看视频慕课网APP
我要回答