我正在尝试编写一个相当简单的正则表达式,以便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
)
)
我几乎可以肯定我犯了一个非常愚蠢的错误,但是我可能会盯着它,我无法弄清楚是什么。我试过搜索它,但无法找到有同样问题的人。这进一步让我觉得这个问题很简单,而且我很朦胧。救命啊!
答案 0 :(得分:1)
使用以下内容:
preg_match('|tag:"(\w+)"|', $str, $results);
在PHP中使用单引号时,它可以省去转义双引号的麻烦,从而避免了对转义内容以及RegEx中字符的混淆。