| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > Регулярка учитывает регистр, а не должна |
| Автор: ashenemy 16.2.2009, 04:48 |
| Есть такой текст <a href="http://www.moiki.biz/"><b><span>ссыЛка 6 для теСТу</span></b></a> регулярка - /<a(.*)?href=(\'|")?http:\/\/www.moiki.biz(\/)?(\'|")?(.*)?>(.*)ссылка 6 для тесту(.*)<\/a>/Uis - не пашет потому что не совпадают регистры, но должно же ведь. помогите плз |
| Автор: skyboy 16.2.2009, 11:59 |
| данные не в UTF-8 случайно? |
| Автор: ashenemy 16.2.2009, 13:22 |
| Нет данные в cp1251 в какой они должны быть то чтобы нормально все пахало? задолбался уже с этими кодировками |
| Автор: skyboy 16.2.2009, 15:13 |
| покажи строку с вызовом РНР-функции полностью. |
| Автор: ashenemy 16.2.2009, 15:53 |
| preg_match("/<a(.*)?href=(\'|")?http:\/\/www.moiki.biz(\/)?(\'|")?(.*)?>(.*)ссылка 6 для тесту(.*)<\/a>/Uis", $string, $return); |
| Автор: Валерия 16.2.2009, 19:17 |
| у тебя шаблон //Uis модификаторы U, i, s Так вот, модификатор i это "учитывать регистр", убери его |
| Автор: skyboy 16.2.2009, 20:40 |
insensetive - не учитывать регистр. |
| Автор: ashenemy 17.2.2009, 02:42 |
| setlocale(LC_ALL, "ru_RU.CP1251"); спасибо помогло |
| Автор: xoptov 21.1.2013, 21:17 | ||||||||||
У меня та же проблема. К сожалению setlocale(LC_ALL, "ru_RU.CP1251"); не помогло! Скрипт сохранен в кодировке cp1251. следующий пример кода:
результат:
а следующий код:
результат:
у кого есть мысли по этому поводу? Заранее благодарен за помощь! |
| Автор: Aliance 22.1.2013, 10:24 |
| Наверное потому, что ([а-я]+) не включает в себя символы верхнего регистра. Нужно написать либо ([A-я]+), либо (\w+) |
| Автор: xoptov 22.1.2013, 13:04 | ||
Не правильно, садись 2. П.С. этот скрипт под Windows работает отлично, а под Linux вот так глючит... |
| Автор: Arantir 22.1.2013, 13:40 |
| xoptov, не понимаю, зачем вам именно а-я с модификатором i? Вот А-я прекрасно работает в cp1251. Или, по-вашему, есть другие символы с разным регистром помимо всех в алфавите? |
| Автор: xoptov 22.1.2013, 19:19 | ||||
Вы правы, с диапазоном все можно решить проще. Но мне нужен именно рабочий модификатор i. Следующий скрипт тоже выводит на экран нулевой результат в Linux:
Модификатор i мне нужен для того чтобы автоматически строить шаблоны из записей в БД. Схема следующая: в БД есть около 800 строк которые должны участвовать в сравнении и если текст совпадает с одной из этих строк то возвращается идентификатор совпавшей строки. Эти 800 строк я преобразую в регулярные выражения по которым и делаю сравнение и тут без модификатора i не обойтись. Как то проблемно преобразовать 800 строк вручную. |
| Автор: Fortop 22.1.2013, 20:15 | ||
Вот чтобы выпендриваться так, нужно обладать знаниями и способностью решить проблему самостоятельно. Проверь что у тебя установилась локаль корректно и что она вообще у тебя есть в системе - бездарь. |
| Автор: xoptov 25.1.2013, 09:27 | ||
Да вы правы, бездарь я! Подскажите как проверить правильно ли установилась локаль? Добавлено через 13 минут и 21 секунду Старый анекдот про Кашперовского. На сцене стоит Кашпировский с инвалидом в каталке и говорит: - Встань и иди! Из зала ему: - Да ты шарлатан! Кашпировский поворачиваться в зал и говорит: - Сиди и не пиз....и! Ну это так к слову... |
| Автор: Fortop 25.1.2013, 21:36 | ||
посмотреть на результат вызова этой функции И вообще выполнить в консоли команду (под unix она есть)
она покажет список доступных локалей в системе. |
| Автор: xoptov 26.1.2013, 02:13 | ||||
Да вы правы! Вызов setlocale(LC_ALL, "ru_RU.CP1251") вообще ничего не возвращает, а setlocale(LC_ALL, "ru_RU.KOI8-R") возвращает результат! К сожалению к ssh доступа нет ;-( В принципе проблема решена установкой локали в UTF-8 и работа с этой кодировкой. Спасибо Fortop за помощь в поиске окончательного решения |