【问题标题】:Extract Two Value between special characters with Preg_Match使用 Preg_Match 提取特殊字符之间的两个值
【发布时间】:2020-08-07 13:31:16
【问题描述】:

您好,我想用一个 preg_match_all 提取用户名和密码值

$url='http://xxxxxxxx.com:80/get.php?username=xxxxxx&password=xxxxxx&type=m3u_plus';

我会在我想要的地方爆炸,但我知道 preg_match_all 效果更好,你能告诉我怎么做吗?

$url_ext = parse_url($url);
$username=explode ("&",explode("=",$url_ext['query'])[1]);
$password=explode ("&",explode("=",$url_ext['query'])[2]);

我尝试使用此代码但无法正常工作

$lotes_fil='~https?://.\=(.+?)&~';
preg_match_all($lotes_fil,$url,$link_pre);

【问题讨论】:

  • parse_url肯定比preg_match_all好,为什么要改?
  • 有时 URL 有第 3 个条件,PARSE 会混淆并更改数组
  • 那又怎样?你看到我上面给出的链接了吗?使用parse_url,然后使用parse_str。这比必须以随机顺序处理未知数量的参数的复杂正则表达式更快且更易于维护。
  • 让我用 parse_str 告诉你

标签: special-characters preg-match-all


【解决方案1】:

最好使用parse_urlparse_str,就像here 解释的那样。

但是,如果您真的想要一个正则表达式,这可以完成工作:

(?<=[?&])([^&=\r\n]+)=([^&=\r\n]+)

preg_match_all('/(?<=[?&])([^&=\r\n]+)=([^&=\r\n]+)/', $url, $matches);

参数名称在第1组,值在第2组

Demo & explanation

【讨论】:

  • 是的,我已经在使用 Parse,它对我来说工作正常。也试试你的正则表达式,它可以工作。现在作为最后的好奇心,您如何设法生成看起来如此复杂的正则表达式,我知道有经验,但总有一些工具可以支持您。可以推荐吗?
  • @Torronf:这是一个有用的站点:regular-expressions.info 您也可以使用regex101.com 来测试您的正则表达式。
猜你喜欢
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
相关资源
最近更新 更多