[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с регулярным выражением
maestro24
Здравствуйте, данное выражение должно выводить все слова заданной длины ($val)
проблема в том, что по какой-то причине этот код работает только для слов на английском языке, т.е. русскоязычные слова не выводятся.

само выражение написано корректно (на сколько показывают тесты на regexp online)

кто знает - в чем может быть проблема? мне кажется в кодировках, раз проблема только с русскими словами, но я вроде бы уже все перепробовал и с кодировками - не работает((

Заранее спасибо.

$pattern = "/\b[A-Z-a-zА-Яа-я]{$val}\b/";
preg_match_all($pattern,$in_text,$array);
$result = '';
for($i=0;$i<count($array[0]);$i++){
$result .= $array[0][$i]."\n";
}




Спустя 6 минут, 14 секунд (20.03.2012 - 19:14) Visman написал(а):
Если UTF-8, то добавь модификатор u в конец регулярки.

Спустя 40 секунд (20.03.2012 - 19:15) Visman написал(а):
A-Z-a-z --> A-Za-z

Спустя 9 минут, 34 секунды (20.03.2012 - 19:25) maestro24 написал(а):
исправил A-Z-a-z --> A-Za-z
+ добавил /u в конец, не помогло(

Спустя 11 минут, 16 секунд (20.03.2012 - 19:36) maestro24 написал(а):
$pattern = '/\b[A-Za-zА-Яа-я]{'.$val.'}\b/u';
preg_match_all($pattern,$in_text,$array);
$result = '';
for($i=0;$i<count($array[0]);$i++){
$result .= $array[0][$i]."\n";
}


не работает((

Спустя 9 минут, 49 секунд (20.03.2012 - 19:46) nugle написал(а):
maestro24
что содержится в $val?

Спустя 9 минут, 3 секунды (20.03.2012 - 19:55) maestro24 написал(а):
в $val - содержится число символов в слове
например

$pattern = '/\b[A-Za-zА-Яа-я]{7}\b/u';
preg_match_all($pattern,$in_text,$array);
$result = '';
for($i=0;$i<count($array[0]);$i++){
$result .= $array[0][$i]."\n";
}


должна вывести все слова длины 7

Спустя 4 минуты, 32 секунды (20.03.2012 - 19:59) Visman написал(а):
<?php
$in_text = 'Пока все было спокойно, но, думается мне, затишье это обманчивое, ложное. Не стали бы из-за пустяков почти весь гарнизон форта сюда перебрасывать. Так что на засаду в любой момент нарваться можно.

Телега показалась, когда мы уже успели отмахать по тракту, пожалуй что, с полверсты. Ухватив Немого за рукав, я жестом показал ему, чтобы он перешел к другой обочине, и, затянув ремень шлема, вышел вперед. Предосторожность оказалась напрасной: правивший заваленной всяким хламом телегой старик вряд ли мог даже помыслить о нападении на нас. Тем более, что позади него сжались, стараясь сделаться как можно более незаметными, две девчушки лет по десять от роду.

И все же рисковать я не стал и взмахом руки приказал ему остановиться, когда до морды гнедой лошадки оставалось еще с десяток шагов.

– Кто таков? – Я поправил врезавшийся в предплечье ремень щита и, не сдержавшись, громко чихнул.

Зашедший сбоку Карл внимательно оглядел телегу и махнул мне, что все в порядке.

– Шон Нильсон, вольный поселенец из-под Забра. – Дедок с опаской поглядел на нас, но, различив на плащах герб Ранлоу, немного успокоился. – К родне в Риист перебираюсь.'
;

$pattern = '/\b[A-Za-zА-Яа-я]{7}\b/u';
preg_match_all($pattern,$in_text,$array);

$result = '';
for($i=0;$i<count($array[0]);$i++){
$result .= $array[0][$i]."\n";
}

echo $result;

?>

вывел
затишье
пожалуй
Ухватив
показал
перешел
обочине
затянув
телегой
сжались
взмахом
лошадки
десяток
оглядел
порядке
Нильсон
вольный
опаской
немного


Спустя 2 минуты, 26 секунд (20.03.2012 - 20:02) maestro24 написал(а):
Цитата (Visman @ 20.03.2012 - 16:59)
<?php
$in_text = 'Пока все было спокойно, но, думается мне, затишье это обманчивое, ложное. Не стали бы из-за пустяков почти весь гарнизон форта сюда перебрасывать. Так что на засаду в любой момент нарваться можно.

Телега показалась, когда мы уже успели отмахать по тракту, пожалуй что, с полверсты. Ухватив Немого за рукав, я жестом показал ему, чтобы он перешел к другой обочине, и, затянув ремень шлема, вышел вперед. Предосторожность оказалась напрасной: правивший заваленной всяким хламом телегой старик вряд ли мог даже помыслить о нападении на нас. Тем более, что позади него сжались, стараясь сделаться как можно более незаметными, две девчушки лет по десять от роду.

И все же рисковать я не стал и взмахом руки приказал ему остановиться, когда до морды гнедой лошадки оставалось еще с десяток шагов.

– Кто таков? – Я поправил врезавшийся в предплечье ремень щита и, не сдержавшись, громко чихнул.

Зашедший сбоку Карл внимательно оглядел телегу и махнул мне, что все в порядке.

– Шон Нильсон, вольный поселенец из-под Забра. – Дедок с опаской поглядел на нас, но, различив на плащах герб Ранлоу, немного успокоился. – К родне в Риист перебираюсь.'
;

$pattern = '/\b[A-Za-zА-Яа-я]{7}\b/u';
preg_match_all($pattern,$in_text,$array);

$result = '';
for($i=0;$i<count($array[0]);$i++){
$result .= $array[0][$i]."\n";
}

echo $result;

?>

вывел
затишье
пожалуй
Ухватив
показал
перешел
обочине
затянув
телегой
сжались
взмахом
лошадки
десяток
оглядел
порядке
Нильсон
вольный
опаской
немного

так да!!!
я и говорю что выражение написано корректно!!!)))

но у меня не работает - вопрос - в чем может быть проблема, если решулярка тут не при чем? )))))))

Спустя 7 минут, 46 секунд (20.03.2012 - 20:09) Visman написал(а):
Файл php сохранен в кодировке UTF-8?
И текст идет в UTF-8?

Спустя 9 минут, 4 секунды (20.03.2012 - 20:18) maestro24 написал(а):
Цитата (Visman @ 20.03.2012 - 17:09)
Файл php сохранен в кодировке UTF-8?
И текст идет в UTF-8?

да, файл в кодировке utf без BOM
сервак настроен на UTF


в index.php в шапке:
<?php
// Вывод заголовка с данными о кодировке страницы
header('Content-Type: text/html; charset=utf-8');
// Настройка локали
setlocale(LC_ALL, 'ru_RU.65001', 'rus_RUS.65001', 'Russian_Russia. 65001', 'russian');
?>

+

<
meta charset="utf-8" />





понять не могу в чем проблема((((

Спустя 42 секунды (20.03.2012 - 20:19) maestro24 написал(а):
+ принудительно вписал в .htaccess

AddDefaultCharset UTF-8

Спустя 11 часов, 11 минут, 33 секунды (21.03.2012 - 07:31) Visman написал(а):
Цитата (maestro24 @ 21.03.2012 - 01:18)
setlocale(LC_ALL, 'ru_RU.65001', 'rus_RUS.65001', 'Russian_Russia. 65001', 'russian');

Не знаю. Ни каких локалей не выставлял и все ок работает.
Тогда уж так
setlocale(LC_ALL, 'ru_RU.UTF-8', 'rus_RUS.UTF-8', 'Russian_Russia.65001');


Еще проверь работау UTF-8

$UTF8_ar = array();
if (preg_match('/^.{1}$/u', "ф", $UTF8_ar) != 1)
exit('PCRE is not compiled with UTF-8 support');
else
exit('PCRE is compiled with UTF-8 support');

Спустя 3 часа, 2 минуты, 11 секунд (21.03.2012 - 10:33) killer8080 написал(а):
Цитата (maestro24 @ 20.03.2012 - 19:02)
я и говорю что выражение написано корректно!!!)))

Да не фига не корректно, исправь как показал maestro24

$pattern = '/\b[a-zа-яё]{'.$val.'}\b/iu';

или
$pattern = "/\b[a-zа-яё]{{$val}}\b/iu";


UPD пардон, попутал кто есть ТС user posted image



Спустя 16 минут, 8 секунд killer8080 написал(а):
вместо
$result = '';
for($i=0;$i<count($array[0]);$i++){
$result .= $array[0][$i]."\n";
}

можно просто
$result = implode("\r\n", $array[0]);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.