0

我知道这听起来可能是一个常见问题,但我很难理解这个过程。所以我有这个字符串:

http://domain.com/campaign/tgadv?redirect

我只需要得到“tgadv”这个词。但我不知道这个词是“tgadv”,它可能是什么。

网址本身也可能会更改并变为:

http://domain.com/campaign/tgadv

或者

http://domain.com/campaign/tgadv/

因此,我需要创建一个函数,该函数将获取活动之后任何其他特定字符之前的任何单词。这就是逻辑。唯一可以确定的是,该词将出现在词campaign/之后,并且在我们正在搜索的词之后的任何其他字符都是一个特殊字符(即/或?)

我试着理解preg_match,但真的不能从中得到任何好的结果..

任何帮助将不胜感激!

4

5 回答 5

1

我不会为此使用正则表达式。我会使用parse_urlbasename

$bits =  parse_url('http://domain.com/campaign/tgadv?redirect');
$filename = basename($bits['path']);
echo $filename;

但是,如果需要正则表达式解决方案,请使用以下内容:

$pattern = '~(.*)/(.*)(\?.*)~';
preg_match($pattern, 'http://domain.com/campaign/tgadv?redirect', $matches);
$filename = $matches[2];
echo $filename;
于 2013-06-06T09:12:10.100 回答
0
$path = "http://domain.com/campaign/tgadv?redirect";
$url_parts = parse_url($path);
$tgadv = strrchr($url_parts['path'], '/');
于 2013-06-06T09:13:55.803 回答
0

你真的不需要一个正则表达式来完成这个。您可以使用stripos()substr()来做到这一点。

例如:

$str = '....Your string...';
$offset = stripos($str, 'campaign/');
if ( $offset === false ){
    //error, end of h4 tag wasn't found
}
$offset += strlen('campaign/');
$newStr = substr($str, $offset);

此时 $newStr 将包含 'campaign/' 之后的所有文本。

然后,您只需要使用类似的过程来查找特殊字符位置并使用 substr() 删除您想要的字符串。

于 2013-06-06T09:14:05.593 回答
0

在这种情况下,您也可以只使用良好的旧字符串函数,无需涉及正则表达式。

首先找到字符串/campaign/,然后取子字符串及其后面的所有内容(tgadv/asd/whatever/?redirect),然后找到下一个/?字符串开头之后的内容,中间的所有内容都是您需要的(tgadv)。

于 2013-06-06T09:14:34.127 回答
0

实际上,preg_match听起来像是解决这个问题的完美方法。我假设您在使用正则表达式时遇到问题?

尝试这样的事情:

<?php
$url = "http://domain.com/campaign/tgadv/";
$pattern = "@campaign/([^/\?]+)@";
preg_match($pattern, $url, $matches);

// $matches[1] will contain tgadv.
于 2013-06-06T09:12:37.947 回答