我知道这听起来像是一个常见的问题,但我很难理解这个过程。 所以我有这个字符串:
http://domain.com/campaign/tgadv?redirect
我只需要“tgadv”这个词。但我不知道这个词是“tgadv”,它可能是什么。
此外,网址本身可能会改变并变为:
http://domain.com/campaign/tgadv
或
http://domain.com/campaign/tgadv/
所以我需要的是创建一个函数,在任何其他特定字符之前之前和之前的任何单词。这是逻辑...... 唯一可以肯定的是,这个词会出现在 campaign / 之后,并且在我们搜索的单词之后的任何其他字符都是特殊字符(即/或?)
我尝试了解preg_match
,但实际上无法从中获得任何好结果。
任何帮助都将受到高度赞赏!
答案 0 :(得分:1)
我不会使用正则表达式。我会使用parse_url
和basename
:
$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;
答案 1 :(得分:0)
实际上,preg_match
听起来像是这个问题的完美解决方案。我假设你正在使用正则表达式的问题?
尝试这样的事情:
<?php
$url = "http://domain.com/campaign/tgadv/";
$pattern = "@campaign/([^/\?]+)@";
preg_match($pattern, $url, $matches);
// $matches[1] will contain tgadv.
答案 2 :(得分:0)
$path = "http://domain.com/campaign/tgadv?redirect";
$url_parts = parse_url($path);
$tgadv = strrchr($url_parts['path'], '/');
答案 3 :(得分: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()去除您想要的字符串。
答案 4 :(得分:0)
在这种情况下你也可以使用好的旧字符串函数,不需要涉及regexp。
首先找到字符串/campaign/
,然后将子字符串包含在其后的所有内容(tgadv/asd/whatever/?redirect
),然后在字符串开头后找到下一个/
或?
,介于两者之间的一切都将是你所需要的(tgadv
)。