соответствующие двойные кавычки в регулярном выражении PHP - PullRequest
1 голос
/ 22 февраля 2012

Я пытаюсь написать то, что должно быть довольно простым регулярным выражением для 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 Ответ

1 голос
/ 22 февраля 2012

Используйте следующее:

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

При использовании одинарных кавычек в PHP это избавляет вас от необходимости избегать двойных кавычек, тем самым избавляя вас от путаницы по поводу того, что экранировать и что является символом в RegEx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...