在a和b

时间:2015-04-22 09:11:11

标签: php regex

我有这个字符串:

&report1=1616078531&report2=1850168139&report3=5957523384&report4=5781950301&END

我正在尝试获取报告编号(在“& report”和“=”之间)(在此示例中)ID为#1850168139(result = 2)的报告。我正在使用一个简单的get_string_between函数,但它不起作用,因为它从字符串中第一次出现的“& report”中提供了整个字符串。

示例:

$report_number = get_string_between($reports_list_id, "&report", "=".$report_id."&");

$ report_list_id是上面的字符串,$ report_id是1850168139。

它给我的结果是:

1=1616078531&report2

但我需要的是只获得“2”。

一直在努力。我将不胜感激任何帮助!

编辑:如果你想知道,这里是get_string_between()函数:

function get_string_between($string, $start, $end){
  $string = " ".$string;
  $ini = strpos($string,$start);
  if ($ini == 0) return "";
  $ini += strlen($start);
  $len = strpos($string,$end,$ini) - $ini;
  return substr($string,$ini,$len);
}

这是一个非常简单的功能,可以在大多数情况下完成工作,但它并没有真正帮助到这里。

2 个答案:

答案 0 :(得分:0)

您可以获得如下参数。如果您想获取参数report1,report2,report3& report4然后它会帮助你。

<?php
    $string = '&report1=1616078531&report2=1850168139&report3=5957523384&report4=5781950301&END';
    parse_str($string, $url_parts);
    //print_r(url_parts);
    $report1 = $url_parts['report1'];
    $report2 = $url_parts['report2'];
    $report3 = $url_parts['report3'];
    $report4 = $url_parts['report4'];
?>

答案 1 :(得分:0)

这是解决问题的好方法。您需要一个用户定义的函数,它将报告ID和整个masterstring作为参数。

在该函数中,您需要构建一个正则表达式模式(使用正向前瞻),如下所示:

image

在这里演示:https://regex101.com/r/iD0fZ4/1

接下来,您需要在主字符串上使用新构造的正则表达式进行测试。如果失败了,你应该返回0之类的内容并中断函数。

如果测试成功,请告诉它返回应该是您的报告ID的第一个捕获组。