2012-02-22 120 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中使用单引号,这样可以节省您需要转义双引号,从而节省您的困惑在什么逃脱,什么是正则表达式的字符。