Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: не работает perl - регуляреное выражени(Кирилица)
Форумы портала PHP.SU » PHP » Регулярные выражения » не работает perl - регуляреное выражени(Кирилица)

Страниц (1): [1]
 

1. tors - 07 Апреля, 2010 - 17:14:15 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  $val='Автор: <a href="mailto:%C3%8D%C3%A5%C3%A8%C3%A7%C3%A2%C3%A5%C3%B1%C3%B2%C3%A5%C3%AD">Aleksey</a>';
  2.  $rxp='/^(Автор:)(.+)(a>)$/';
  3.  $res=preg_match($rxp,$val,$Word);
  4.  



так работает, те $res==true
и $Word[0] - Возвращает то, что нужно:
CODE (html):
скопировать код в буфер обмена
  1. Автор: <a href=
  2. "mailto:%C3%8D%C3%A5%C3%A8%C3%A7%C3%A2%C3%A5%C3%B1%C3%B2%C3%A5%C3%AD">
  3. Aleksey</a>


а если :
PHP:
скопировать код в буфер обмена
  1. setlocale (LC_ALL, array ("ru_RU.CP1251", "rus_RUS.1251"));
  2.  
  3.  config=array('ident' => TRUE,
  4.      'char-encoding' => win1251,
  5.      'input-encoding' => win1251,
  6.      'output-encoding' => win1251);
  7.  
  8.  $link="http://www.xakep.ru/post/49795/default.asp";
  9.  
  10.  $tidy=new tidy;
  11.  $rs=$tidy->parseFile($link,$config);
  12.  $node=$tidy->Body();
  13.  $val=$node->value;
  14.  $rxp='/^(Автор:)(.+)(a>)$/';
  15.  $res=preg_match($rxp,$val,$Word);
  16.  
  17.  


res==false,
хотя полученный текст html - документа содержит : HTML:
CODE (html):
скопировать код в буфер обмена
  1.  Автор: <a href=
  2. "mailto:%C3%8D%C3%A5%C3%A8%C3%A7%C3%A2%C3%A5%C3%B1%C3%B2%C3%A5%C3%AD">
  3.  Aleksey</a>
  4.  


только с разрывами строк после href= и перед Aleksey

почему не работает regexp?
2. trot - 07 Апреля, 2010 - 21:05:43 - перейти к сообщению
Попробуй поставить модификаторы s и m
3. tors - 08 Апреля, 2010 - 08:16:04 - перейти к сообщению
Цитата:
Попробуй поставить модификаторы s и m


не помогат
4. Champion - 08 Апреля, 2010 - 11:06:40 - перейти к сообщению
tors пишет:
(АвторУлыбка
Нужно либо чтобы файл был сохранен в той же кодировке, в которой приходят строки на обработку, либо писать коды кириллических символов \х99 вот так. Или \u9999, если юникод.
5. tors - 08 Апреля, 2010 - 12:48:40 - перейти к сообщению
Цитата:
Нужно либо чтобы файл был сохранен в той же кодировке, в которой приходят строки на обработку, либо писать коды кириллических символов \х99 вот так. Или \u9999, если юникод.


приходила такая мысль

PHP:
скопировать код в буфер обмена
  1. $rxp="/^(\xC0\xE2\xF2\xEE\xF0)(.+)(a>)$\s\m/";


не работат
6. JustUserR - 09 Апреля, 2010 - 12:00:25 - перейти к сообщению
tors пишет:
Приходила такая мысль
Либо как вариант можно изменить текущую локаль или преобразовать данные с помощью iconv - потому что регулярные выражения не особо хорошо работают со сторонней для данного PHP-скрипта кодировкой
7. trot - 09 Апреля, 2010 - 20:53:28 - перейти к сообщению
$rxp="/^(\xC0\xE2\xF2\xEE\xF0)(.+)(a>)$\s\m/";

что значит \s\m ?
8. tors - 10 Апреля, 2010 - 01:14:56 - перейти к сообщению
Цитата:
что значит \s\m ?


Цитата:
Попробуй поставить модификаторы s и m
9. Champion - 10 Апреля, 2010 - 08:32:17 - перейти к сообщению
Модификаторы ставятся после закрывающего символа (у тебя - /) и не экранируются. А так получилось, что после конца строки у тебя должны идти пробел, слеш и буква m
10. JustUserR - 10 Апреля, 2010 - 14:01:40 - перейти к сообщению
trot пишет:
Что значит \s\m ?
Если расположить их правильно после закрывающего слеша то будут значить следующее - /s значи то что символ точка . соответствует также символу новой строки - а модификатор /m в Perl означает многостроковое регулярное выражние но оно здесь не совсем кстати - просто в пробелы игнорируются и скажем заместо пробела пишут \x20 - но здесь это не влияет
И также советую вам привести проверяемые в регулярном выражении данные в одну с PHP-скриптом однобайтовую кодировку- например windows-cp1251 (Для юникода уже придется использовать другой формат с 4 символами)

 

Powered by ExBB FM 1.0 RC1