首页 > 解决方案 > preg_match_all 用于特殊字符 [?]

问题描述

我有一个网址:

https://my.site.com/u/0/ac?export=download&confirm=45vy&id=qNhdhk1jejhXLexLpY3RiDY2oamis">D

我想使用 preg_match_all 匹配它。我的正则表达式是:

preg_match_all('/(https:\/\/my\.site\.com\/[u]\/[0]\/(ac)\/(?)\/.*\">D)/', $input_lines, $output_array);

但我无法匹配?上面代码中的特殊字符。我尝试使用(?). 但它不匹配。我知道这可能是一个蹩脚的问题,但如果有人可以帮助我匹配?或在 preg_match_all 中转义?,那将很有帮助。

标签: phpregex

解决方案


我只是注意到在 ac 之后没有/链接,但是您在正则表达式中添加了它,所以只需尝试删除它或使用下面的代码,它的工作和测试。

<?php

$input_lines = 'https://my.site.com/u/0/ac?export=download&amp;confirm=45vy&amp;id=qNhdhk1jejhXLexLpY3RiDY2oamis">D';
preg_match_all('/(https:\/\/my\.site\.com\/[u]\/[0]\/(ac)(\?).*\">D)/', $input_lines, $output_array);

var_dump($output_array);

这是输出 - https://prnt.sc/weq86u

或者,如果有可能ac/?发生之后,那么您可以尝试/在正则表达式中使用作为可选参数

<?php

$input_lines = 'https://my.site.com/u/0/ac?export=download&amp;confirm=45vy&amp;id=qNhdhk1jejhXLexLpY3RiDY2oamis">D';
preg_match_all('/(https:\/\/my\.site\.com\/[u]\/[0]\/(ac)\/?(\?).*\">D)/', $input_lines, $output_array);

var_dump($output_array);

它将匹配带有或不带有/ https://prnt.sc/weqbae的两个链接


推荐阅读