2011-04-29 119 views
2

假设我有一列 'URL' 项下的条目,像这样:根据分隔符拆分列值?


URL


“GET /书籍/小说ID = 324223”
“GET /教室/ HTTP /1.0"
“GET /register.php HTTP/1.0”
“POST /thankyou.php HTTP/1.0”
“GET /register.php?error=alreadyregistered HTTP/1.0”
“POST/processlogin.php?接下来=%2Fregister.php%3Ferror%3Dalreadyregistered HTTP/1.0"
“GET /register.php?error=alreadyregistered HTTP/1.0”
“GET /书/小说?ID = 324273”

我需要一个查询,这将帮助我获取第一对斜线中包含的单词,URL中的'/'。例如。 '教室','注册'等...

而且条目不限于这些..所以我需要一个通用的查询,而不是一个特定的一个..帮助?

+0

为什么你不能在后处理中做到这一点? – 2011-04-29 21:18:34

回答

3

这应该做的伎俩(如果我理解正确的问题):

$request = "GET /books/fiction?id=324223"; 

// captures URI from request string 
$request_array = explode(' ', $request); 
$request_uri = $request_array[ 1 ]; 

// captures anything between/and . or/
preg_match('#\/(.*?)[./]#', $request_uri, $matches); 

var_dump($matches); 
+0

这是我第一次看到它,它的工作就像一个魅力:) :)经过一个小小的编辑... as .. isset(matches [1]) var_dump($ matches [1]); //为我的要求.. 谢谢Ondrej :) – wave5459 2011-04-29 23:46:56

1
select substring_index(substring_index('http://books/serious?id=32423','//',-1),'/',1) 
+0

感谢Mr.Nick ..这工作正常的具体条目,但我是一个更一般的查询..我详细说明.. – wave5459 2011-04-29 21:25:21

+0

不知道你到底在找什么,它很难给你一个答案。 :) – 2011-04-29 21:27:36

+0

我明白:)我编辑它以形成更具体的请求。 – wave5459 2011-04-29 21:34:05

1
$teststr = array(
"GET /books/fiction?id=324223", 
"GET /classroom/ HTTP/1.0", 
"GET /register.php HTTP/1.0", 
"POST /thankyou.php HTTP/1.0", 
"GET /register.php?error=alreadyregistered HTTP/1.0", 
"POST /processlogin.php?next=%2Fregister.php%3Ferror%3Dalreadyregistered HTTP/1.0", 
"GET /register.php?error=alreadyregistered HTTP/1.0", 
"GET /books/fiction?id=324273"); 

foreach($teststr as $str) 
if(preg_match('/\/(?P<folder>\w+)\//', $str, $match)) 
    echo $match['folder']."<br />"; 

回报

books 
classroom 
books 
+0

这很好,谢谢:)但execution'll会花费时间,因为我的数组大小增加... – wave5459 2011-04-29 23:45:27

1

这一个班轮应该这样做:

$node = preg_replace('~^.*?/([^./]+).*$~', '$1', $string); 

您可以see the output result at Codepad

books extracted from GET /books/fiction?id=324223 
classroom extracted from GET /classroom/ HTTP/1.0 
register extracted from GET /register.php HTTP/1.0 
thankyou extracted from POST /thankyou.php HTTP/1.0 
register extracted from GET /register.php?error=alreadyregistered HTTP/1.0 
processlogin extracted from POST /processlogin.php?next=%2Fregister.php%3Ferror%3Dalreadyregistered HTTP/1.0 
register extracted from GET /register.php?error=alreadyregistered HTTP/1.0 
books extracted from GET /books/fiction?id=324273