Я использую PHP strpos()
чтобы найти иглу в абзаце текста. Я изо всех сил пытаюсь найти следующее слово после того, как найдена игла.
Например, рассмотрим следующий параграф.
$description = "Hello, this is a test paragraph. The SCREENSHOT mysite.com/screenshot.jpg and the LINK mysite.com/link.html is what I want to return.";
Я могу использовать strpos($description, "SCREENSHOT")
чтобы определить, существует ли SCREENSHOT, но я хочу получить ссылку после SCREENSHOT, а именно mysite.com/screenshot.jpg
. Аналогичным образом, я хочу определить, содержит ли описание LINK, а затем возвращает mysite.com/link.html
.
Как я могу использовать strpos()
а затем вернуть следующее слово? Я предполагаю, что это может быть сделано с RegEx, но я не уверен. Следующим словом будет «пробел после иглы, за которым следует что-нибудь, а затем пробел».
Благодаря!
Или «старый» способ … 🙂
$word = "SCREENSHOT "; $pos = strpos($description, $word); if($pos!==false){ $link = substr($description, $pos+strlen($word)); $link = substr($link, strpos($link, " ")); }
Вы можете сделать это с помощью одного регулярного выражения:
if (preg_match_all('/(SCREENSHOT|LINK) (\S+?)/', $description, $matches)) { $needles = $matches[1]; // The words SCREENSHOT and LINK, if you need them $links = $matches[2]; // Contains the screenshot and/or link URLs }
Я провел небольшое тестирование на своем сайте, используя следующее:
$description = "Hello, this is a test paragraph. The SCREENSHOT mysite.com/screenshot.jpg and the LINK mysite.com/link.html is what I want to return."; $matches = array(); preg_match('/(?<=SCREENSHOT\s)[^\s]*/', $description, $matches); var_dump($matches); echo '<br />'; preg_match('/(?<=LINK\s)[^\s]*/', $description, $matches); var_dump($matches);
Я использую положительный lookbehind, чтобы получить то, что вы хотите.