如何去除preg_match_all匹配结果数组[3]末尾的问号?
解决正则匹配后数组元素末尾带问号的问题
我来帮你搞定这个问题!你遇到的是正则匹配时不小心把URL里的问号也捕获进数组元素的情况,咱们分两种思路来解决:
方法一:修改正则表达式,直接不捕获问号
你的原正则里,(.+?)?start=true这部分的非贪婪匹配会把?start=true前面的问号也包含进去。咱们可以调整正则,用[^?]+来匹配除问号之外的所有字符,这样就能精准捕获到问号前的内容,不会把问号带进来。
修改后的代码如下:
preg_match_all('/class="_2zACE" href="(/tv-shows/)(.+?)\/([^?]+)\?start=true"/', $url_pre_series, $url_lote_serie, PREG_SET_ORDER);
这样匹配后,数组的[3]元素就会是s01_e01_the_killings_at_badgers_drift,完全不带末尾的问号啦。
方法二:匹配后手动移除问号
如果你不想修改正则,也可以在匹配完成后,对捕获到的结果做简单处理,去掉末尾的问号。常用的两种方式:
- 用
rtrim()函数移除末尾指定字符:
// 假设取第一个匹配结果的[3]元素 $url_lote_serie[0][3] = rtrim($url_lote_serie[0][3], '?');
- 用正则替换掉末尾的问号:
$url_lote_serie[0][3] = preg_replace('/\?$/', '', $url_lote_serie[0][3]);
这两种方法都能快速把多余的问号去掉,根据你的需求选就行~
内容的提问来源于stack exchange,提问作者Torronf
相关产品推荐
相关产品推荐

