-
Вебмастеру
(
http://forum.oszone.net/forumdisplay.php?f=22)
Регулярное выражение - вырезать все кроме указанных в масиве слов
Есть переменная в ней хранятся все страны:
PHP код:
$country = "Австралия, Андора, Австрия, Россия, Украина, Германия";
и т.д. все страны.
Собственно в чем вопрос, есть код который выводит контент на страницу, контент выводит к примеру переменная $content далее мы вырезаем из контента все теги:
PHP код:
$content=strip_tags($content);
дальше нужно из этого контента вырезать все, кроме одного слова - название страны (в контенте всего один раз встречается любое из названия стран), если оно входит в список $country и вывести название страны на экран!
Подскажите, плиз, буду признателен, спасибо!
|
у вас логика непонятная... зачем ради одного слова вырезать теги и все остальное?
|
вам нужно привести примерно к такому виду (список стран вставить в шаблон, предварительно обработав)
PHP код:
if(preg_match('/Австралия|Андора|Австрия/i', $content, $matches)) echo $matches[0];
|
Не пойму, в чем ошибка:
PHP код:
$country = "Австралия|Андора|Австрия";
$content="Здесь <i>описание</i> страны Австралия. Также <b>другой</b> тест и так и далее!";
$content=strip_tags($content);
if(preg_match('/$country/i', $content, $result))
echo $result[0];
Подскажите, плиз :(
|
нашел ошибку, но теперь проблема в другом:
PHP код:
$country = 'Австралия|Андора|Австрия';
$content="Здесь <i>описание</i> страны Австралиядский. Также <b>другой</b> тест и так и далее!";
$content=strip_tags($content);
if(preg_match("/$country/i", $content, $result))
echo $result[0];
В контенте слово Австралиядский, а скрипт результат выдает Австралия, это неправильно, так нужно точное вхождение слова, а не его какое-либо склонение.
все понял, нужно было \b добавить :)
PHP код:
if(preg_match("/\$country\b/i", $content, $result))
|
В чем может быть проблема, скрипт работает, но если мы не указали в переменной $country какую то страну или её вообще нет в контенте, то эта информация в цикле не выводится :( как сделать так, чтобы если есть страна то пусть выводится, если нет такой страны в списке, то выводить надпись "Не известно":
PHP код:
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>";
}
|
А этот вариант, правильней?
PHP код:
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>";
}
}
|
Цитата:
Цитата venuko
все понял, нужно было \b добавить »
|
не, тогда подмаску нужно юзать
PHP код:
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 уже не прокатит)...
|
Цитата:
Цитата Sham
не, тогда подмаску нужно юзать »
|
подмаска, это это?
Цитата:
Цитата Sham
+ нужно позаботиться чтобы в $country не было служебных символов (preg_quot уже не прокатит)... »
|
Каких служебных символов, точек, запятых и т.д.?
|
Цитата:
Цитата venuko
Каких служебных символов, точек, запятых »
|
т.е. в названиях стран не было служебных символов, потому как если загнать $country в preg_quote, то экранируются все "|"...
|
ок, понял, спасибо за подсказку
а в чем рзница между этими значениями 0 или 1 ?
PHP код:
echo $result[1];
echo $result[0];
|
Время: 12:55.
© OSzone.net 2001-