PHP:从带有preg_match的字符串之间获取文本

时间:2018-04-05 17:52:00

标签: php regex preg-match

我很抱歉,如果之前有人问过类似的问题,但是经过数小时的研究后,我无法完成我想要做的事情。另外请记住,我对regex / preg_match不是很熟悉。感谢

$string  = "<?php include('manage.php'); header('Location: https://google.ca/drive/'); ?>";

我如何仅返回此字符串中的URL,即https://google.ca/drive/

2 个答案:

答案 0 :(得分:1)

如果您对正则表达式不满意并且可以保证您显示的字符串格式是唯一可能的格式,那么这将有效:

<?php
$string  = "<?php include('manage.php'); header('Location: https://google.ca/drive/'); ?>";

echo substr( explode( "'", $string )[3], 10 );

答案 1 :(得分:0)

像这样的东西

var newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?newParameter=1';
window.history.pushState({ path: newurl }, '', newurl);

在线试用

https://regex101.com/r/dKors4/1

解释

  • 开始和结束 preg_match('/(\'|")location:\s*(?P<url>[^\1]+)\1/i', $string, $match); 只是分隔符(我不知道为什么你需要它们,但你可以,它们可以是其他东西,如/等)
  • #捕获组('|")单个或双引号
  • (...)文字匹配
  • location:匹配空格一次或多次
  • \s*已命名的捕获组,显示在(?P<url>...)中,捕获以下内容
    • $match['url']不是[^\1]+字符集^(所以这里不匹配)[...]一次或多次,+反向引用第一个捕获组\1。因此,在英语中匹配除了我们在第一个捕获组中发现的引用一次或多次之外的所有内容。
  • 然后我们通过将Backreference与引号相匹配来关闭它。
  • ('|")是结束分隔符,\i标志不区分大小写。您可以iLocation:

所以用英语说全部:

查找我们正在使用的报价类型,捕获它。匹配字符串location:。然后在location:中捕获除我们找到的引用类型之外的任何内容,以相同的引用结束。

希望这是有道理的。