2012-02-22 118 views
1

我想寫一個PHP腳本的相當簡單的正則表達式來匹配tag:後跟一個雙引號的單詞。我希望它只返回引號內的值,減去引號本身(tag:"whatever"返回whatever)。在PHP中匹配雙引號正則表達式

我有一個搜索框提交表單數據(通過GET,如果重要的話)本身,並運行一個PHP腳本。這是在腳本中發生了什麼:

$q = urldecode(filter_input(INPUT_GET, 'q', FILTER_SANITIZE_STRING)); 
preg_match_all("/tag:\"([\w]+)\"/", $q, $tags); 

我想它來搭配像tag:"this",但是當我尋找的是,我沒有得到任何比賽:

//print_r($tags) yields: 
Array 
(
    [0] => Array 
    (
    ) 
    [1] => Array 
    (
    ) 
) 

我想這可能是一種逃避的問題,所以我也試過

$q = stripslashes(urldecode(filter_input(INPUT_GET, 'q', FILTER_SANITIZE_STRING))); 
preg_match_all("/tag:\"([\w]+)\"/", $q, $tags); 

$q = urldecode(filter_input(INPUT_GET, 'q', FILTER_SANITIZE_STRING)); 
preg_match_all("/tag:\\\"([\w]+)\\\"/", $q, $tags); 

這兩個都返回兩個空數組的相同數組。

在絕望中我甚至用單引號(和搜索tag:'this'),我也沒必要逃跑試了一下,但是這也沒有返回:

$q = urldecode(filter_input(INPUT_GET, 'q', FILTER_SANITIZE_STRING)); 
preg_match_all("/tag:'([\w]+)'/", $q, $tags); 

刪除引號,順便說一下,使它做工精細:

//searching for tag:something with preg_match_all("/tag:([\w]+)/", $q, $tags); yields: 
Array 
(
    [0] => Array 
    (
     [0] => tag:something 
    ) 
    [1] => Array 
    (
     [0] => something 
    ) 
) 

我幾乎可以肯定我在做一個非常愚蠢的錯誤,而是盯着它,因爲我可能,我想不出什麼。我試圖尋找它,但無法找到任何人有同樣的問題。這進一步導致我認爲這個問題很微不足道,而且我很朦朧。幫幫我!

+0

嘗試'var_dump($ q);'所以你可以看到'$ q'的確切內容。 – 2012-02-22 14:53:43

+1

將外部引號切換爲單引號,這將消除所有這些轉義的需要......''/ tag:「([\ w] +)」/''正則表達式中的引號不需要轉義。 – 2012-02-22 14:53:52

+0

你可以做var_dump($ q)嗎?我很確定,正則表達式工作正常。 – gintas 2012-02-22 14:57:30

回答

1

使用以下命令:

preg_match('|tag:"(\w+)"|', $str, $results); 

當在PHP中使用單引號,這樣可以節省您需要轉義雙引號,從而節省您的困惑在什麼逃脫,什麼是正則表達式的字符。