如何使用php提取部分文本
我有下面的文本,想得到'canacad.ac.jp_dqrg6k9pg1ss879somecodekj88c8%40group.calendar.google.com',它在src=之后 是REGEX吗如何使用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
$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解析查询
$query = parse_url($url, PHP_URL_QUERY);
# string(89) "src=canacad.ac.jp_dqrg6k9pg1s879somecodekj88.../Tokyo"
这已经是我们追求的价值的一步。因此,还有一步要做:
- 第三:从查询中解析SRC值
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');