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
)
)
我幾乎可以肯定我在做一個非常愚蠢的錯誤,而是盯着它,因爲我可能,我想不出什麼。我試圖尋找它,但無法找到任何人有同樣的問題。這進一步導致我認爲這個問題很微不足道,而且我很朦朧。幫幫我!
嘗試'var_dump($ q);'所以你可以看到'$ q'的確切內容。 – 2012-02-22 14:53:43
將外部引號切換爲單引號,這將消除所有這些轉義的需要......''/ tag:「([\ w] +)」/''正則表達式中的引號不需要轉義。 – 2012-02-22 14:53:52
你可以做var_dump($ q)嗎?我很確定,正則表達式工作正常。 – gintas 2012-02-22 14:57:30