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