匹配PHP正则表达式中的双引号

时间:2012-02-22 14:51:04

标签: php regex double-quotes

我正在尝试编写一个相当简单的正则表达式,以便PHP脚本匹配tag:后跟双引号中的单词。我希望它只返回引号内的值,减去引号本身(tag:"whatever"返回whatever)。

我在页面上有一个搜索框,它将表单数据(通过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
    )
)

我几乎可以肯定我犯了一个非常愚蠢的错误,但是我可能会盯着它,我无法弄清楚是什么。我试过搜索它,但无法找到有同样问题的人。这进一步让我觉得这个问题很简单,而且我很朦胧。救命啊!

1 个答案:

答案 0 :(得分:1)

使用以下内容:

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

在PHP中使用单引号时,它可以省去转义双引号的麻烦,从而避免了对转义内容以及RegEx中字符的混淆。