С помощью SO я смог вытащить «ключевое слово» из строки темы письма для использования в качестве категории. Теперь я решил разрешить несколько категорий для каждого изображения, но не могу правильно сформулировать свой вопрос, чтобы получить хороший ответ от Google. preg_match останавливается при первом слове в списке. Я уверен, что это имеет какое-то отношение к тому, чтобы быть «нетерпеливым» или просто заменять символ трубы |
с чем-то другим, но я просто не вижу этого.
\b(?:amsterdam|paris|zurich|munich|frankfurt|bulle)\b
.
Вся строка, которую я использую сейчас, это:
preg_match("/\b(?:amsterdam|paris|zurich|munich|frankfurt|bulle)\b/i", "." . $subject . ".", $matches);
Все, что мне нужно сделать, это вытащить все эти слова, если они присутствуют, в отличие от остановки в Амстердаме, или что-то другое слово на первом месте в предмете, который он ищет. После этого, это просто вопрос с массивом $ matches, не так ли?
Спасибо, Марк
Итак, вот пример кода с preg_match_all()
который также показывает, как удалить вложенность:
$pattern = '\b(?:amsterdam|paris|zurich|munich|frankfurt|bulle)\b'; $result = preg_match_all($pattern, $subject, $matches); # Check for errors in the pattern if (false === $result) { throw new Exception(sprintf('Regular Expression failed: %s.', $pattern)); } # Get the result, for your pattern that's the first element of $matches $foundCities = $result ? $matches[0] : array(); printf("Found %d city/cities: %s.\n", count($foundCitites), implode('; ', $foundCities));
Поскольку $foundCities
теперь является простым массивом, вы можете также перебирать его напрямую:
foreach($foundCities as $index => $city) { echo $index, '. : ', $city, "\n"; }
Нет необходимости в вложенном цикле, поскольку возвращаемое значение $matches
matches уже нормализовано. Концепция заключается в том, чтобы вернуть код / создать данные так, как вам нужно для дальнейшей обработки.