PHP:preg_match&爆炸从url

时间:2017-01-08 11:45:10

标签: php regex

我想从网址中获取一些随机代码(以d_r_开头)

示例:

 1. domain.com/index/book-one-d_123456
 2. domain.com/index/book-one-r_123456

我想显示链接是“d_123456”是否显示“d_123456”的内容,以及“r_123456”是否显示“r_123456”的内容。并在“d_”或“r _”之后爆炸随机码。

我尝试过:

if ($co){
$rand = explode('/',$co);

if (preg_match('/^.*([d_]).*?$/i', $rand[1]))
{
$res = explode("d_",$rand[1]);
some code..........
{
else if (preg_match('/^.*([r_]).*?$/i', $soid[1]))
{
$res = explode("r_",$rand[1]);
some code..........
}

我可以从“d_”获得随机代码,但我无法让它为“r_”工作或似乎没有检测到。

对不起,我很早就发布了,谢谢你的帮助:D 已经找到了这篇文章的解决方案:https://stackoverflow.com/a/4366744/5118751

我只是改变:

if ($co){
$rand = explode('/',$co);

if (preg_match('/d_/', $rand[1]))
{
$res = explode("d_",$rand[1]);
some code..........
{
else if (preg_match('/r_/', $soid[1]))
{
$res = explode("r_",$rand[1]);
some code..........
}

现在正在完善工作...

3 个答案:

答案 0 :(得分:1)

我不确定这是否是您正在寻找的 - 正则表达式非常粗糙。

$urls=array(
    'domain.com/index/book-one-d_123456',
    'domain.com/index/book-one-r_123456'
);

$pttn='@(.*)(d_(\d+))|(.*)(r_(\d+))@i';
foreach( $urls as $url ){

    preg_match( $pttn, $url, $matches );
    $matches=array_filter( $matches );
    if( !empty( $matches ) )print_r( array_values( $matches ) );
}

将输出:

Array
(
    [0] => domain.com/index/book-one-d_123456
    [1] => domain.com/index/book-one-
    [2] => d_123456
    [3] => 123456
)
Array
(
    [0] => domain.com/index/book-one-r_123456
    [1] => domain.com/index/book-one-
    [2] => r_123456
    [3] => 123456
)

从输出中,您可以决定要进一步处理的项目......

答案 1 :(得分:0)

根据您的示例网址,$rand[1]将是index,而不是您正在寻找的分隔符。使用$rand[2]代替$rand[1]

答案 2 :(得分:0)

我个人讨厌正则表达式,所以我相信有更简单的方法可以做你需要做的事情!

<?php
$url='domain.com/index/book-one-r_123456';
$ex=explode('_',$url);
    if(substr($ex[0],-1)=='d') { //checking if last letter is d
        //do some code, random code is $ex[2];, letter is d
    } elseif(substr($ex[0],-1)=='r') { //checking if last letter is r
        //do some code, random code is $ex[2]; letter is r
    }
?>
祝你好运!