为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
12345678_0001 2021-12-03 15:27:09
我想在 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到目前为止,我读过的例子都不起作用。
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

您的问题是您已使用 将正则表达式锚定到字符串的开头^,因此它只会匹配以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-copada

mi-otra-noticia-copada


查看完整回答
反对 回复 2021-12-03
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

此表达式可能会返回所需的输出:


^https?:\/\/(?:www\.)?(?:[\w]+\.[\w]+)*\/(.*)$

如果你想探索/简化/修改表达式,它已在regex101.com 的右上角面板中进行了 解释。如果您愿意,您还可以在此链接中观看它如何与某些示例输入匹配。


测试

$re = '/^https?:\/\/(?:www\.)?(?:[\w]+\.[\w]+)*\/(.*)$/m';

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

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

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

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

https://www.mywebsite.online/mi-otra-noticia-copada';


preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);


var_dump($matches);


查看完整回答
反对 回复 2021-12-03
  • 2 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信