Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Регулярное выражение - вырезать все кроме указанных в масиве слов (http://forum.oszone.net/showthread.php?t=130290)

venuko 29-01-2009 16:05 1023551

Регулярное выражение - вырезать все кроме указанных в масиве слов
 
Есть переменная в ней хранятся все страны:

PHP код:

$country "Австралия, Андора, Австрия, Россия, Украина, Германия"

и т.д. все страны.

Собственно в чем вопрос, есть код который выводит контент на страницу, контент выводит к примеру переменная $content далее мы вырезаем из контента все теги:

PHP код:

$content=strip_tags($content); 

дальше нужно из этого контента вырезать все, кроме одного слова - название страны (в контенте всего один раз встречается любое из названия стран), если оно входит в список $country и вывести название страны на экран!

Подскажите, плиз, буду признателен, спасибо!

venuko 29-01-2009 17:14 1023605

хм, эта задача сложна?

Sham 29-01-2009 18:48 1023706

у вас логика непонятная... зачем ради одного слова вырезать теги и все остальное?

Sham 29-01-2009 19:32 1023750

вам нужно привести примерно к такому виду (список стран вставить в шаблон, предварительно обработав)
PHP код:

if(preg_match('/Австралия|Андора|Австрия/i'$content$matches)) echo $matches[0]; 


venuko 29-01-2009 20:56 1023848

Не пойму, в чем ошибка:

PHP код:

$country "Австралия|Андора|Австрия";

$content="Здесь <i>описание</i> страны Австралия. Также <b>другой</b> тест и так и далее!";
$content=strip_tags($content);

if(
preg_match('/$country/i'$content$result))

echo 
$result[0]; 

Подскажите, плиз :(

venuko 29-01-2009 21:15 1023862

нашел ошибку, но теперь проблема в другом:

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


venuko 29-01-2009 21:36 1023886

В чем может быть проблема, скрипт работает, но если мы не указали в переменной $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 
"&nbsp; - $result2[0]</a>";
echo 
"</p>";




venuko 29-01-2009 21:58 1023903

А этот вариант, правильней?

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>"







Sham 30-01-2009 03:05 1024069

Цитата:

Цитата 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 уже не прокатит)...

venuko 30-01-2009 08:11 1024136

Цитата:

Цитата Sham
не, тогда подмаску нужно юзать »

подмаска, это это?

Цитата:

Цитата Sham
+ нужно позаботиться чтобы в $country не было служебных символов (preg_quot уже не прокатит)... »

PHP код:

({$country}) 

Каких служебных символов, точек, запятых и т.д.?

Sham 30-01-2009 09:35 1024197

venuko, http://ru.php.net/manual/ru/regexp.reference.php читаем внимательно...

venuko 30-01-2009 09:38 1024200

Цитата:

Цитата Sham
venuko, http://ru.php.net/manual/ru/regexp.reference.php читаем внимательно... »


уже читаю, пасиб :)

Sham 30-01-2009 09:42 1024207

Цитата:

Цитата venuko
Каких служебных символов, точек, запятых »

т.е. в названиях стран не было служебных символов, потому как если загнать $country в preg_quote, то экранируются все "|"...

venuko 30-01-2009 09:43 1024209

ок, понял, спасибо за подсказку

а в чем рзница между этими значениями 0 или 1 ?


PHP код:

echo $result[1];

echo 
$result[0]; 


Sham 30-01-2009 09:51 1024217

http://ru.php.net/manual/ru/function.preg-match.php

0 - совпадение целиком, 1 - первая подмаска (там это одно и то же)


Время: 12:55.

Время: 12:55.
© OSzone.net 2001-