Intereting Posts
Характерная строка diff в PHP Сортировка многомерного массива несколькими ключами Захват прогресса из командной строки Могу ли я установить константу в классе, а затем получить доступ к ней на PHP? субдомен laravel 5 перенаправлен на главную страницу Невозможно получить отношение от одного до многих в Laravel 4 jquery post данные в php-скрипт и немедленно отображать его в том же файле сценария php Где я могу найти синтаксический анализатор JSLint / js, написанный на PHP? Что такое синтаксис «break / continue $ var» (будет удален в PHP 5.4)? Альтернативный способ записи строковых литералов в PHP? (без «или») Преобразование текстовой ссылки в HTML с учетом контекста Проблемы с проверкой наличия или отсутствия таблицы в db PHP. Неинтересно загружать данные <head> </ head> в качестве include получение почтового ящика через API facebook получить массив всех атрибутов продуктов в magento

получение пустых результатов массива с использованием preg_match_all для значений, которые не соответствуют

Я использую preg_match_all для поиска значений HashTag в ответ на запрос Twitter.

Он работает так, как я ожидал, за исключением тех случаев, когда результаты поиска не имеют никаких хеш-значений в них. По какой-то причине массив $ tags по-прежнему имеет значения, и я не уверен, почему.

Это потому, что мой RegEx неверен, или это проблема с preg_match_all?

благодаря

$tweet = "Microsoft Pivot got Runner-Up for Network Tech from The Wall Street Journal in 2010 Technology Innovation Awards http://bit.ly/9pCbTh"; private function getHashTags($tweet){ $tags = array(); preg_match_all("/(#\w+)/", $tweet, $tags); return $tags; } 

результаты:

 Array ( [0] => Array ( ) [1] => Array ( ) ) 

Ожидаемые результаты:

 Array(); 

В режиме по умолчанию preg_match_all возвращает массив совпадений и подматричек:

PREG_PATTERN_ORDER
Заказывает результаты, так что $matches[0] представляет собой массив совпадений полного шаблона, $matches[1] – это массив строк, совпадающих с первым подшаблотелем в скобках и т. Д.

Таким образом, в этом случае первый массив представляет собой массив совпадений всего шаблона, а второй массив представляет собой массив совпадений первого подшаблона. И так как совпадения не найдено, оба массива пустые.

Если вы хотите другой порядок, имея каждое соответствие в массиве с его PREG_SET_ORDER , используйте параметр PREG_SET_ORDER в параметре flags :

 preg_match_all("/(#\w+)/", $tweet, $tags, PREG_SET_ORDER); 

Вы получаете две пустые массивы, потому что вы соответствуете выражению и подвыражению. Ваши ожидаемые результаты на самом деле являются ошибкой здесь. Проверьте руководство , в частности описание поведения по умолчанию, когда флаги не передаются в четвертом аргументе:

Заказывает результаты, так что $ matches [0] представляет собой массив совпадений полного шаблона, $ matches 1 – это массив строк, совпадающих с первым подшаблотелем в скобках и т. Д.

Вы всегда получаете многомерный массив из preg_match_all, если вы не передадите PREG_OFFSET_CAPTURE в качестве аргумента флага. В этом случае вы должны фактически получить пустой массив для выражения, которое не соответствует чему-либо.