2016-08-03 119 views
-1

我得到了下面的字符串:在字符串中找到字/字符串,我需要正則表達式嗎?

... 12:32 +0304] "GET /test.php?param=value .... 

我想提取test.php的出這個字符串。我試圖找到一個PHP功能,可以做到這一點,但沒有什麼幫助。所以我的下一個猜測是,正則表達式和我試圖這麼長時間來獲得GET /和?之間的部分。我失敗了......在PHP中的函數是否存在可以幫我解決這個問題還是我需要使用正則表達式?如果我這樣做,我怎麼能從字符串中獲得一個字符串?重要的是,我不想知道test.php是否在字符串中。我想獲取GET /和?之間的所有內容。

非常感謝

+1

PHP字符串函數可以很容易地做到這一點,而無需任何正則表達式。 – anubhava

+0

你知道這個名字嗎? – nova

+0

順便說一句,這看起來像一個Apache日誌,如果是,你可以控制服務器配置,你可以改變一些你可以更容易地解析。 – apokryfos

回答

2

正則表達式中捕獲組提取GET /?之間的任何:

GET \/(.*?)\? 

演示:https://regex101.com/r/wR9yM5/1

在PHP它可以用於像這樣:

$str = '... 12:32 +0304] "GET /test.php?param=value ....'; 
preg_match('/GET \/(.*?)\?/', $str, $re); 
print_r($re[1]); 

演示:https://ideone.com/0XzZwo

0

試試這個:

(?>(\/))(\w+.php) 

,或者如果你想要的任何extention,2首或3個數字:

(?>(\/))(\w+.\w{3}) 

如果只有3個,刪除 「2」,從括號。

PHP CODE:

<?php 
$subject='12:32 +0304] "GET /test.php?param=value'; 
$pattern='/(?>(\/))(\w+.{2,3})/s'; 
if (preg_match($pattern, $subject, $match)) 
echo $match[0]; 
?> 
+0

這是一個匹配,但我不能提取的部分:/也許你可以解釋這一行,我真的不能處理正則表達式 – nova

+0

編輯已被制定。 –

2
<?php 
    $string  = '... 12:32 +0304] "GET /test.php?param=value ....'; 
    $find  = explode("GET /", explode(".php", $string)[0])[1].".php"; 
    echo $find; // test.php 
?> 
0

沒有正則表達式:

function between_solidus_and_question_mark($str) { 
    $start = strtok($str, '/'); 
    $middle = strtok('?'); 
    $end = strtok(null); 

    if($start && $end) { 
     return $middle; 
    } 
} 

$str  = '... 12:32 +0304] "GET /test.php?param=value ....'; 
var_dump(between_solidus_and_question_mark($str)); 

輸出:

test.php 
相關問題