【问题标题】:PHP extract from string [duplicate]PHP从字符串中提取[重复]
【发布时间】:2013-04-03 22:23:54
【问题描述】:

我有一个字符串,其中有一个带有变量的 url,例如:

http://www.example.com/?foo=example1&foo1=example2&foo2=example3

我对 PHP 很陌生,在查看分隔符和修饰符时,我无法完全理解如何将它们正确地应用于我的情况而不会出现某种错误。 我想知道是否有人可以指出我如何将“foo1”提取到它自己的变量中以便在其他地方使用的正确方向。我需要提取“&foo1=”和以下“&”之间的数据。

这就是我所拥有的(不正确的分隔符/修饰符):

("&foo1=[^&]+?\&'", $getData))

那么我该如何解决这个问题以提取“foo1”的数据呢?

编辑:这个带有我需要的变量的 URL 在一个字符串中,而不是一个 URL 本身,它是一个外部链接。变量也不总是 URL 形式,它们通常只是在字符串中,就像这样的变量:

foo=example1&foo1=example2&foo2=example3

那么从这样的字符串中,我将如何提取“foo1”的值?

【问题讨论】:

  • $_GET['foo1']$_GET['foo2']
  • 您是想更好地理解正则表达式,还是真的需要提取键/值对?有更简单的方法可以做到这一点。
  • 是你的网站,所以你想提取你得到的变量吗?还是您要解析并获取这些变量的 URL?
  • PHP 内置了各种功能,包括 url 和查询字符串解析。我建议您在编写自己的代码之前先检查一下(除非仅用于学习目的)。
  • 尝试使用正则表达式进行解析是徒劳的。幸运的是,对于这种 exact 案例,您有函数 parse_url()parse_str()

标签: php regex string extract


【解决方案1】:

首先parse_url它,然后将查询部分传递给parse_str

$url ="http://www.example.com/?foo=example1&foo1=example2&foo2=example3";
$parsedUrl = parse_url($url);
$query = array();
parse_str($parsedUrl['query'],$query);
var_dump($query);

-- array (
  'foo' => 'example1',
  'foo1' => 'example2',
  'foo2' => 'example3',
)

【讨论】:

  • 谢谢你,但是变量的值每次都不同,我需要从字符串中间抓取“foo1”并将其放入 PHP 中的变量中以供使用。其他答案建议将其解析为 URL,但是,我没有提到(我应该有),它在字符串中并不总是采用 URL 形式,变量通常保存在其中,只是 "foo=example1&foo1 =example2&foo2=example3".
【解决方案2】:

它是你的网站吗?你想知道传递的值是什么吗? $_GET['...'].

否则,如果您想解析一个 URL,并提取变量,

preg_match_all('/([^?&=#]+)=([^&#]*)/', $url, $matches);

【讨论】:

  • 使用正则表达式解析 URL 是一个非常糟糕的解决方案。正如answer 所展示的那样,PHP 已经内置了解析 URL 的函数。
【解决方案3】:

只是扩展“类”的答案以帮助您理解,?foo=example1 之类的意思是 foo 是一个值为 example1 的变量。

在 php 中,要从 url 中获取这些值,只需使用 $_GET['myvariablename'],在您的情况下,它将是

$var1 = $_GET['example1'];
$var2 = $_GET['example2'];
$var3 = $_GET['example3'];

【讨论】:

  • 变量在一个字符串中,有很多文本,然后是一个链接,每次“foo1”的值都不同。我不能使用 $_GET,因为它不是用于脚本的 URL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 2014-07-17
  • 2017-09-24
  • 2018-06-11
  • 2018-12-14
  • 2011-07-04
相关资源
最近更新 更多