Показать полную графическую версию : Регулярное выражение - вырезать все кроме указанных в масиве слов
Есть переменная в ней хранятся все страны:
$country = "Австралия, Андора, Австрия, Россия, Украина, Германия";
и т.д. все страны.
Собственно в чем вопрос, есть код который выводит контент на страницу, контент выводит к примеру переменная $content далее мы вырезаем из контента все теги:
$content=strip_tags($content);
дальше нужно из этого контента вырезать все, кроме одного слова - название страны (в контенте всего один раз встречается любое из названия стран), если оно входит в список $country и вывести название страны на экран!
Подскажите, плиз, буду признателен, спасибо!
у вас логика непонятная... зачем ради одного слова вырезать теги и все остальное?
вам нужно привести примерно к такому виду (список стран вставить в шаблон, предварительно обработав)
if(preg_match('/Австралия|Андора|Австрия/i', $content, $matches)) echo $matches[0];
Не пойму, в чем ошибка:
$country = "Австралия|Андора|Австрия";
$content="Здесь <i>описание</i> страны Австралия. Также <b>другой</b> тест и так и далее!";
$content=strip_tags($content);
if(preg_match('/$country/i', $content, $result))
echo $result[0];
Подскажите, плиз :(
нашел ошибку, но теперь проблема в другом:
$country = 'Австралия|Андора|Австрия';
$content="Здесь <i>описание</i> страны Австралиядский. Также <b>другой</b> тест и так и далее!";
$content=strip_tags($content);
if(preg_match("/$country/i", $content, $result))
echo $result[0];
В контенте слово Австралиядский, а скрипт результат выдает Австралия, это неправильно, так нужно точное вхождение слова, а не его какое-либо склонение.
все понял, нужно было \b добавить :)
if(preg_match("/\$country\b/i", $content, $result))
В чем может быть проблема, скрипт работает, но если мы не указали в переменной $country какую то страну или её вообще нет в контенте, то эта информация в цикле не выводится :( как сделать так, чтобы если есть страна то пусть выводится, если нет такой страны в списке, то выводить надпись "Не известно":
while ($row = $db->sql_fetchrow($result)) {
$id = $row['id'];
$title = stripslashes($row['title']);
$article = stripslashes($row['article']);
$country = 'Франция|Германия|США|Россия';
$content = $article;
$content=strip_tags($content);
if(preg_match("/$country/i", $content, $result2))
echo "<p>$title";
echo " - $result2[0]</a>";
echo "</p>";
}
А этот вариант, правильней?
while ($row = $db->sql_fetchrow($result)) {
$id = $row['id'];
$title = stripslashes($row['title']);
$article = stripslashes($row['article']);
$country = 'Франция|Германия|США|Россия';
$content = $article;
$content=strip_tags($content);
if(preg_match("/$country/i", $content, $result2)) {
echo "<p>$title</p>";
echo "<p>$result2[0]</p>";
} else {
echo "<p>$title</p>";
echo "<p>$article</p>";
}
}
все понял, нужно было \b добавить »
не, тогда подмаску нужно юзать
if(preg_match("/({$country})\b/i", $content, $result))
{
echo "<p>$title</p>";
echo "<p>$result[0]</p>"; // или $result[1]
}
else // если страна не найдена
{
echo "<p>$title</p>";
echo "<p>$article</p>";
}
не понятно, зачем у вас strip_tags и stripslashes (и без этого будет работать)...
+ нужно позаботиться чтобы в $country не было служебных символов (preg_quot уже не прокатит)...
не, тогда подмаску нужно юзать »
подмаска, это это?
+ нужно позаботиться чтобы в $country не было служебных символов (preg_quot уже не прокатит)... »
({$country})
Каких служебных символов, точек, запятых и т.д.?
venuko, http://ru.php.net/manual/ru/regexp.reference.php читаем внимательно...
venuko, http://ru.php.net/manual/ru/regexp.reference.php читаем внимательно... »
уже читаю, пасиб :)
Каких служебных символов, точек, запятых »
т.е. в названиях стран не было служебных символов, потому как если загнать $country в preg_quote, то экранируются все "|"...
ок, понял, спасибо за подсказку
а в чем рзница между этими значениями 0 или 1 ?
echo $result[1];
echo $result[0];
http://ru.php.net/manual/ru/function.preg-match.php
0 - совпадение целиком, 1 - первая подмаска (там это одно и то же)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.