如何使用php提取部分文本

如何使用php提取部分文本,php,regex,Php,Regex,我有下面的文本,想得到'canacad.ac.jp_dqrg6k9pg1ss879somecodekj88c8%40group.calendar.google.com',它在src=之后 是REGEX吗 $text ='<iframe src="http://www.google.com/calendar/embed?src=canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8%40group.calendar.google.com&ctz=Asia

我有下面的文本,想得到'canacad.ac.jp_dqrg6k9pg1ss879somecodekj88c8%40group.calendar.google.com',它在src=之后

是REGEX吗

$text ='<iframe src="http://www.google.com/calendar/embed?src=canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8%40group.calendar.google.com&ctz=Asia/Tokyo" style="border: 0" width="800" height="600" frameborder="0" scrolling="no"></iframe>';
$text='';

提前感谢。

使用正则表达式

preg_match("/\\?src=([^&\"]+)/i", $text, $results)
var_dump($results)
正则表达式可能是一种方法:

现在URL已经被提取出来了。由于这是一个URL,因此可以使用标准URL函数进行处理。让我们看看:

  • 第二:从URL解析查询
要从URL获取SRC值,可以再次使用正则表达式。然而,由于PHP具有特定于URL处理的函数,因此我使用这些函数。我能准确地说出我需要什么。这次我首先需要URL的查询部分。这是在问号后面有查询变量的部分:

$query = parse_url($url, PHP_URL_QUERY);

# string(89) "src=canacad.ac.jp_dqrg6k9pg1s879somecodekj88.../Tokyo"
这已经是我们追求的价值的一步。因此,还有一步要做:

  • 第三:从查询中解析SRC值
这里,PHP也内置了一个函数来实现这一点。我们可以使用函数从URL提取查询中的所有变量。由于它通过函数参数返回结果,因此现在需要两行代码:

parse_str($query, $vars);
$src = $vars['src'];

# string(68) "canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8@group.calendar.google.com"
现在,
$src
变量是您要查找的值

下面是上面的全部代码:

$text = '<iframe src="http://www.google.com/calendar/embed?src=canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8%40group.calendar.google.com&ctz=Asia/Tokyo" style="border: 0" width="800" height="600" frameborder="0" scrolling="no"></iframe>';


$url   = sscanf($text, '<iframe src="%[^"]')[0];
$query = parse_url($url, PHP_URL_QUERY);

parse_str($query, $vars);
$src  = $vars['src'];

var_dump($url, $query, $src);
所以,不管你在每个步骤中使用什么函数:如果你把一个问题分成更小的部分,你几乎总能解决更大的问题。而且,如果其中一个子步骤出现问题,您只需要修复一个步骤,而不是整个操作。如果您使用一个正则表达式来完成所有这些工作,那么您将面临单点故障(在HTML和URL的世界中构建一个好的正则表达式是非常重要的,因此它可能会崩溃)

例如,一个完美的解决方案是在第一步使用HTML解析器。例如,使用或使用流行的DOMDocument扩展名:


HTML解析器的好处是它能够理解HTML元素。您可以查找特定的元素和属性,即使它们的位置发生变化。

不会得到他想要的。@Loamhoof,更正,谢谢。您还可以包括另一个检查。如果没有其他get参数:
[^&“]
parse_str($query, $vars);
$src = $vars['src'];

# string(68) "canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8@group.calendar.google.com"
$text = '<iframe src="http://www.google.com/calendar/embed?src=canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8%40group.calendar.google.com&ctz=Asia/Tokyo" style="border: 0" width="800" height="600" frameborder="0" scrolling="no"></iframe>';


$url   = sscanf($text, '<iframe src="%[^"]')[0];
$query = parse_url($url, PHP_URL_QUERY);

parse_str($query, $vars);
$src  = $vars['src'];

var_dump($url, $query, $src);
string(126) "http://www.google.com/calendar/embed?src=canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8%40group.calendar.google.com&ctz=Asia/Tokyo"
string(89) "src=canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8%40group.calendar.google.com&ctz=Asia/Tokyo"
string(68) "canacad.ac.jp_dqrg6k9pg1s879somecodekj88c8@group.calendar.google.com"
// Tidy (non error-checked):
$url = tidy_parse_string($text)->body()->child[0]->attribute['src'];

// DOMDocument (non error-checked):
$url = @DOMDocument::loadHTML($text)->getElementsByTagname('iframe')
             ->item(0)->getAttribute('src');