Я использую 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, чтобы получить то, что вы хотите.