2013-06-29 3 views
1

Вот моя проблема, у меня есть текст в PHP:PHP Найти все вхождения целого слова из текста

$text = "Car is going with 10 meters/second" 

$find = array("meters","meters/second"); 

теперь, когда я делаю это:

foreach ($find as $f) 
    { 
    $count = substr_count($text,$f); 
    } 

Выход:

meters -> 1 
meters/second -> 1 

Обычно я считаю метры не/вторым как целое слово, так что метры не должны учитываться, только м/сек, так как нет места их отделяет

Так что я Ожидать:

meters -> 0 
meters/second -> 1 
+0

почему это должно быть 0 для 'meters'? он появляется в тексте ... – Guillaume

+1

'meter' также есть. Тогда зачем 0? – kushpf

+0

Вы делаете это с помощью субстрата. если вы просите найти только целые слова, пожалуйста, немного поискайте :) –

ответ

1

Вы можете сделать это с помощью регулярного выражения, \b не будет работать, потому что / является границей слова, но что-то подобное должно работать:

preg_match_all(",meters([^/]|$),", $text, $matches); 
print_r($matches[0]); 
+0

это отлично работает только с метрами, он возвращает 0, но только на секунды он возвращает 1. в то время как в течение нескольких секунд он должен быть 0 –

0
$exists = preg_match("/\bmeters\b/", $text) ; 

\b стенды для словораздела.

+0

, что не работает, потому что '/' является границей слова – Guillaume

0

Чтобы сделать то, что вы хотите, вам нужно будет использовать regular expressions. Что-то вроде:

$text = "Car is going with 10 meters/second"; 
$find = array("/\bmeters\b/", "/\bmeters\/second\b/"); 

foreach($find as $f) { 
    print(preg_match_all($f, $text)); 
} 
+0

, которая не работает, потому что '/' является границей слов – Guillaume

+0

. Это работает, потому что это сбегает с \. Я протестировал его, и он получил результаты, которые желал OP. –

Смежные вопросы