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.