Я пытаюсь написать то, что должно быть довольно простым регулярным выражением для 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
)
)
Я почти уверен, что совершаю действительно глупую ошибку, но смотрю на нее, как мог бы, я не могу понять, что. Я пытался найти его, но не смог найти никого с такой же проблемой. Это также заставляет меня думать, что проблема тривиальна, и что я неясен. Помогите!