Как найти следующую строку после иглы, используя Strpos () - PullRequest
3 голосов
/ 01 февраля 2011

Я использую 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. Аналогичным образом я хочу определить, содержит ли описание ССЫЛКУ, а затем вернуть mysite.com/link.html.

Как я могу использовать strpos() и затем вернуть следующее слово? Я предполагаю, что это может быть сделано с помощью RegEx, но я не уверен. Следующим словом будет «пробел после иглы, за которым следует что-нибудь, за которым следует пробел».

Спасибо!

Ответы [ 3 ]

1 голос
/ 01 февраля 2011

Я провел небольшое тестирование на своем сайте, используя следующее:

$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);

Я использую позитивный взгляд, чтобы получить то, что вы хотите.

1 голос
/ 01 февраля 2011

Или по-старому ...: -)

$word = "SCREENSHOT ";
$pos = strpos($description, $word);
if($pos!==false){
    $link = substr($description, $pos+strlen($word));
    $link = substr($link, strpos($link, " "));
}
1 голос
/ 01 февраля 2011

Вы можете сделать это с помощью одного регулярного выражения:

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
}
...