Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите написать регулярное выражение, Нужно отсеч окончания у словосочетаний 
:(
    Опции темы
Myp3uk
Дата 15.9.2006, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



Например есть словосочетания: "красная машина, рыжие волосы, опытное направление физики, .... "

Нужно регулярным поископ найти следующее.

Идеальный вариант: array("красн машин","рыж волос","опытн направлен физик" .....
Допустимый вариант (уберать два символа с конца каждого слова): array("красн маши","рыж воло","опытн направлен физи"....

Т.е надо чтобы просто отсекалось окончание, два последних символа каждого слова в фразе.

Это сообщение отредактировал(а) Myp3uk - 15.9.2006, 22:00
PM MAIL   Вверх
skyboy
Дата 15.9.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Myp3uk, на самом деле, окончаний имеется ограниченный набор: "ая", "ое", "ия" и т.д.. В общем, можно жестко задать. это идея №1.
идея №2: окончания только гласные. Т.е. находим последнюю гласную и от неё режем слово.
Оба варианта примитивные и неточные. Но есть.

PM MAIL   Вверх
Myp3uk
Дата 15.9.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



Это понятно. Меня именно интересует регулярное выражение которое будет отсекать у всех слов в выражении. Т.е. я могу написать рег.выр. которое будет отсекать окончания у отдельных слов или у последнего слова в выражении, а вот у каждого слова в выражении не получается не получается.
PM MAIL   Вверх
skyboy
Дата 15.9.2006, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



replace(/..\b/g,''), будучи применённым к строке, удалит тебе по два символа в конце каждого слова. но тут - нет работы с тем, какие там буквы. тем более, что удаляться буквы будут даже у трёхбуквенного слова, что явно не подходит. вобщем, если есть алгоритм какой-нить, описывай. будем думать.

Добавлено @ 23:22 
сорри, перепутал с javascript.

Добавлено @ 23:23 
Код

preg_replace('/..\b/','',$your_str);

PM MAIL   Вверх
Myp3uk
Дата 15.9.2006, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



Код

<?
$keyword="красная машина, рыжие при волосы";
$string="Опять в моде красные машины красные марки с девками с рыжими при волосами 123 321";
    $keyword=explode(",",$keyword);
    foreach($keyword as $key){
        $kkey=explode(" ",$key);
        $patern="/( ";
        foreach($kkey as $k){
            $patern.=preg_replace("/(\w{3,0})\w{2}/i","\$1",$k)."[а-я]{0,4} ";
        }
        $patern.=")/i";
        echo $patern."<br/>";
        $replacent="<b>\$1</b>";
        $string=preg_replace($patern,$replacent,$string);
    }
    echo $string;
?>

Вот вроде работает. Особой строгости тут и не надо. Все дело вот в чем. Надо выделить в тексте ключевые слова, которые вводит пользователь. Соответственно это могут быть и фразы и слова поотдельности.
Я не особо силен в регуляпных выражениях, так что строго не судите.
PM MAIL   Вверх
Myp3uk
Дата 15.9.2006, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



Странно....
У меня на компе все прекрасно работает, а вот на сервере не хочет...
На сервере он не обрезает слова.
В чем может быть проблема?

Добавлено @ 23:52 
Понял в чем проблема. Он русский текст не расценивает как символы, т.е. поиск с таким шаблоном \w+ ни чего не дает...
Как с этим бороться?

Это сообщение отредактировал(а) Myp3uk - 15.9.2006, 23:45
PM MAIL   Вверх
-=Ustas=-
Дата 15.9.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(Myp3uk @  15.9.2006,  23:44 Найти цитируемый пост)
У меня на компе все прекрасно работает, а вот на сервере не хочет...
На сервере он не обрезает слова. 

На что-нибудь ругается?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Myp3uk
Дата 15.9.2006, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



При этом если есть английские слова в тексте он их находит... А русские нет.
Статьи хранятся в базе MySQL в blob поле. Может из-за этого косяк?

Добавлено @ 23:57 
Ни на что не ругается. Просто не воспринимает русские символы в статье.
PM MAIL   Вверх
-=Ustas=-
Дата 16.9.2006, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Не уверен, но попробуй:
Код

setlocale(LC_ALL, 'ru_RU.cp2151');


Добавлено @ 00:02 
Кстати, кодировка на хосте какая?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Myp3uk
Дата 16.9.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



Не помогло.

Вот простейший пример:

Код

$article="Лопша хороша а маша лучше Ancord Group Ltd";
$article=preg_replace("/(\w{3,})/i","<b>\$1</b>",$article);



В результате работы (как я понимаю) все слова должны будут выделены в тэг <b>.
У меня на компе так и проиходит. А вот на сервере выделяются только Ancord Group Ltd;

Че делать?

Добавлено @ 00:11 
А как узнать кодировку на хосте?
PM MAIL   Вверх
Myp3uk
Дата 16.9.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



Неужели ни кто не сталкивался с этой проблемой. 
До сих пор актуально. Не могу решить проблему.

PM MAIL   Вверх
-=Ustas=-
Дата 16.9.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(Myp3uk @  16.9.2006,  00:10 Найти цитируемый пост)
А как узнать кодировку на хосте?

Попробуй узнать у админов сервака. Какая кодировка юзается для твоего хоста.

Цитата(Myp3uk @  16.9.2006,  15:04 Найти цитируемый пост)
Неужели ни кто не сталкивался с этой проблемой. 

Сталкивался я,  у меня была похожая проблема, кодировка хоста по дефолту была koi8-r, пришлось делать маску типа:
Код

ю-ъЮ-Ъ

Это границы начала и конца русских символов в кодировке кои8. Для вин1251 надо посмотреть.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Myp3uk
Дата 17.9.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



Блин стока бился над этой херью, а оказалось что просто надо писать локаль не ru_RU.cp1251, а ru_RU.CP1251. Т.е. большими буквами... Всем спасибо....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0623 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.