![]() |
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]() ![]() ![]() |
|
Splendid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 1.8.2007 Где: Беларусь, Минск Репутация: нет Всего: нет |
Подскажите, пожалуйста, как изменить это регулярное выражение?
сейчас оно разбивает строку на слова: 1. перед которыми стоит минус 2. перед которыми стоит плюс 3. те, что заключены в кавычки "слово слово2" и фразу "Закон Республики Беларусь "О печати"" оно сейчас разбивает на: 1. Закон Республики Беларусь 2. о 3. печати Ну а надо, чтобы разбивало так: 1. Закон Республики Беларусь "О печати". Вот...помогите, пожалуйста...
|
|||
|
||||
kasmanaft |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Здесь можно зацепиться за "" - две рядомстоящие кавычки.
Попробуйте так: $pattern = '/(?(?=\")\".*\"(?![^\"]*\"\")|(\+|-)?(\b\w+\b))/iUs'; PS из-за этого, может быть, глючить будет в каких-нибудь хитрых местах. |
|||
|
||||
Splendid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 1.8.2007 Где: Беларусь, Минск Репутация: нет Всего: нет |
kasmanaft, спасибо!
Но это ведь частный случай - две рядом стоящие кавычки... здесь скорее как-то надо типа с первой кавычки по последнюю кавычку...просто я в регулярках не сильна, поэтому и спрашиваю |
|||
|
||||
kasmanaft |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
" издали " закон " о печати " блаблабла " " - вот попробуйте определить, что я здесь взял в кавычки
![]() По идее хотел вот так: "издали "закон "о печати" блаблабла"" . . . . ![]() ![]() |
|||
|
||||
Splendid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 1.8.2007 Где: Беларусь, Минск Репутация: нет Всего: нет |
kasmanaft,
![]() ![]() у меня с этой регуляркой еще одна проблема возникла, при переносе на сервер она странно разбивает слова, например экран ищет как 2 слова: "к" и "ан", в чем здесь может быть проблема??? в некоторых словах обрезает последнюю букву, а некоторые нормально ищет... |
|||
|
||||
kasmanaft |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Я сейчас подумаю как записать то, что напридумывал.. А ты покажи пока код свой. А то в зависимости от того какой функцией разбиваешь, разные проблемы могут быть..
И скорее всего предыдущую рег. экспу придется разбить на две... Потому что получится слишком заумно (а она и так, надо сказать, непростая) |
|||
|
||||
Splendid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 1.8.2007 Где: Беларусь, Минск Репутация: нет Всего: нет |
вот код:
Добавлено через 30 секунд причем локально все работает правильно |
|||
|
||||
kasmanaft |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Ну начнем...
Придумал вот что: /"(?=\S)(?:[^"]*|(?R))*(?<=\S)"/is Второе выражение, наверное, нужно вот таким оставить: (\+|-)(\b\w+\b) - убрал "+" после первой скобки, по-моему, он там не нужен. (объединить два выражения уже не получится, в первом использована рекурсия). Итого тебе осталось два раза использовать preg_match_all() и после этого объединить полученные массивы (третий аргумент). Проблемы на сервере могут быть из-за неправильно настроенной локали. Посмотри setlocale(). Может быть получится вот так setlocale (LC_ALL, array ('ru_RU.CP1251', 'rus_RUS.1251')), а может быть придется имена локалей уточнить у хостера.
Упс, а я и не приметил ![]() В таком случае, если чего не получится, помогу довести всё это дело до конца ![]() ![]() Это сообщение отредактировал(а) kasmanaft - 19.11.2007, 16:30 |
|||
|
||||
Splendid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 1.8.2007 Где: Беларусь, Минск Репутация: нет Всего: нет |
Настройки локали у меня такие прописаны...но все равно глюки...
я уже вообще ничего не соображаю.... Помогите Ваши регулярки в мой код подставить, пожалуйста.. |
|||
|
||||
kasmanaft |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Что с кодом: Поменяйте у себя
Потом надо что-то сделать с str_replace() вот здесь:
Она не должна удалять кавычки внутри запроса, а только по краям (это можно решить с помощью trim($val, '"') ) и, наверное, не надо вообще удалять "\". (т.е. str_replace() заменить на trim() - вроде бы должно сработать) Конечно же, нужно бы потестировать. Это сообщение отредактировал(а) kasmanaft - 19.11.2007, 17:28 |
||||||||
|
|||||||||
Splendid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 1.8.2007 Где: Беларусь, Минск Репутация: нет Всего: нет |
Спасибо! Пойду пробовать!
а если такая локаль, то что прописывать надо: LANG = "ru_RU.UTF-8"???? |
|||
|
||||
kasmanaft |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Просто заменить те, что были наверху на эту. Но, честно говоря, не знаю, изменит ли это что-нибудь или нет - текст-то ведь в CP1215, а тут UTF-8.
Понял для чего нужен был тот вопросительный знак.. Всё-таки он был нужен. То есть вот так попровте: $reg = '/(?:\+|-)?\b\w+\b/is'; И насчет локали.. Вы говорите, неправильно ищет слово "экран". А если его в кавычки взять? Если так сработает, то можно второе рег. выражение попробовать оформить вот так: $reg = '/(?:\+|-)?\b[a-zA-Zа-яёА-ЯЁ0-9-_]+\b/is'; |
|||
|
||||
Splendid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 1.8.2007 Где: Беларусь, Минск Репутация: нет Всего: нет |
в кавычках работает...
что же с этой локалью ничего сделать нельзя??? Может можно на серваке установить CP1215? Как вообще в этих случаях поступают? если подставлять ваши 2 выражения - то выдает кучу ошибок...сейчас приведу их Добавлено через 2 минуты и 12 секунд Notice: Undefined variable: where in F:\Program Files\wamp\www\reestr_skript18\search.php on line 153 это отсюда
надо видимо что-то еще в коде исравить |
|||
|
||||
kasmanaft |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Хм... странно.
Я забыл, что кавычки там будут экранированные, поэтому надо: trim($word, '\\"'). (кстати, Вы $val заменили на $word? я просто так, в качестве примера этот код привел..) . . . . . . Ага.. понял в чем дело (про trim() не забудте). Вы, видимо, не обратили внимание на вот это:
Заменить лучше вот таким: $reg = '/(?:\+|-)?\b[a-zA-Zа-яёА-ЯЁ0-9-_]+\b/is'; (это второе выражение) И попробуйте этот злополучный "экран" поискать (без кавычек).
![]() Это сообщение отредактировал(а) kasmanaft - 19.11.2007, 19:05 |
||||
|
|||||
Splendid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 1.8.2007 Где: Беларусь, Минск Репутация: нет Всего: нет |
в итоге должно получится вот так?
Вроде все ищет, спасибо огромное!!! Добавлено через 1 минуту правда кавычки в кавычках все равно не воспринимает ![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Тексты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |