Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拆分链接字符串_Php - Fatal编程技术网

Php 拆分链接字符串

Php 拆分链接字符串,php,Php,我有一个如下链接: 我想将其拆分,以便保留两条信息,示例272中的adinfo值,以及示例Company Inc.中的链接词 我可以用下面的代码来做,但这是六行代码,将字符串切分为几位,我发现它非常难看,所以我想知道是否有更简单/更好的方法 $str = right($str, strlen($str)-36); $pos = strpos($str, '"'); $value = left($str, $pos); $str = right($str, strlen($str)-($pos+

我有一个如下链接:

我想将其拆分,以便保留两条信息,示例272中的adinfo值,以及示例Company Inc.中的链接词

我可以用下面的代码来做,但这是六行代码,将字符串切分为几位,我发现它非常难看,所以我想知道是否有更简单/更好的方法

$str = right($str, strlen($str)-36);
$pos = strpos($str, '"');
$value = left($str, $pos);
$str = right($str, strlen($str)-($pos+2));
$pos = strpos($str, '</a>');
$link = left($str, $pos);
$str=right($str,strlen($str)-36);
$pos=strpos($str,“”);
$value=左侧($str,$pos);
$str=右($str,strlen($str)-($pos+2));
$pos=strpos($str',);
$link=左侧($str,$pos);

(left和right是我自己的函数,它们保留字符串的左侧或右侧部分,并剪切其余部分)

如果您不想使用正则表达式:

使用strpos()查找子字符串“”adinfo=“的位置,您将获得该url参数值的相对位置


再次使用strpos()查找第一次出现的“>”,您将获得链接文本开头的位置。

您不应该使用find/replace/regex执行类似操作,而应该尝试使用DOM进行HTML解析。但是,如果您设置为只操作字符串,则可以使用简单的regex轻松实现这一点:

$str = '<a href="/site/cdb/index.php?adinfo=272">Company Inc.</a>';

$matches = array();
preg_match('/<a href=\"[^\?]+\?adinfo=(272)\">([^<]+)/', $str, $matches);

$id = $matches[1];
$name = $matches[2];
$str='';
$matches=array();
预匹配('/([^
php>$s='';
php>echo preg_替换('@.*adinfo=(\d+).*?>(.*?@'、'$1-$2'、$s);
272-公司公司。

我认为正则表达式是适合您的方法,但是我不擅长为您编写正则表达式。这比您要求的要多得多,因此开销可能不值得。(我没有查看源代码)但是它应该能帮助你做到这一点,以及你需要做的任何其他HTML解析。我迫不及待地想尝试一下。我想你的意思是第一次出现
。这就是我正在做的,链接是非常一致的,唯一改变的是adinfor值和链接词,我不知道它们的长度$str=right($str,strlen($str)-36);//“$pos=strpos($str,”);//确定职位结束报价$value=left($str,$pos);$str=right($str,strlen($strlen)-($pos+2));//$str现在是‘公司’。$pos strpos=strpos($str,);//确定职位结束标签$link=left($str,$pos);Aleks G的答案比我的好。
php > $s = '<a href="/site/cdb/index.php?adinfo=272">Company Inc.</a>';
php > echo preg_replace('@.*adinfo=(\d+).*?>(.*?)</a>@', '$1 - $2', $s);
272 - Company Inc.