Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » PHP. Регулярные выражения и русские символы.

Ответить
Настройки темы
PHP. Регулярные выражения и русские символы.

Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Пытаюсь отловить в тексте www адрес в виде Получается такая реализация:
Код: Выделить весь код
$Body = EReg_Replace("\[url=([[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/])\]([[:alnum:]]+)\[/url\]",
                          "<a href=\"\\1\">\\2</a>", $Body);
Единственное регулярка не отлавливает конструкции если в них "заголовок ссылки" набран русскими буквами. Setlocale не помогла. Есть варианты?

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 15:47, 14-01-2004

 

Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


Prisoner
Код: Выделить весь код
<?php
// коды для вставки картинок
$Codes["img"] = array(
    // esc [[img]], [[/img]], [[img=*]] => [img], [/img], [img=*]
  "#\[\[(/?)img\]\]#is" => "&#91;$1img&#93;",
  "#\[\[img=(\S+?)\]\]#is" =>"&#91;img=$2&#93;",

  // Безопасность: убираем потенциальные ссылки на скрипты (\s* - защита от IE)
  "#\[img=.*?s\s*c\s*r\s*i\s*p\s*t\s*:.*?\]#is" =>
    "&#91;img=<font class=\"warning\">&laquo;предупреждение: скрипты в постах запрещены&raquo;</font>&#93;",

  "#\[img\].*?s\s*c\s*r\s*i\s*p\s*t\s*:.*?\[/img\]#is" =>
    "&#91;img&#93;<font class=\"warning\">&laquo;предупреждение: скрипты в постах запрещены&raquo;</font>&#91;/img&#93;",

  // Безопасность: убираем картинки, ссылающиеся на e-mail (назойливая штука)
  "#\[img=[^]]*?mailto:[^]]*?\]#is" =>
    "&#91;img=<font class=\"warning\">&laquo;предупреждение !&raquo;</font>&#93;",

    "#\[img\][^]]*?mailto:[^]]*?\[/img\]#is" =>
    "&#91;img&#93;<font class=\"warning\">&laquo;предупреждение !&raquo;</font>&#91;/img&#93;",

    "#\[img=(\S+?)\]\s*(?!.*?\[(?:img).*?)(.+?)\s*\[/img\]#is" =>
    "<img src=\"$1\" alt=\"$2\" title=\"$2\" />",

    "#\[img]\s*(?!.*?\[(?:img).*?)(.+?)\s*\[/img\]#is" =>
    "<img src=\"$1\" alt=\"$1\" title=\"\" />",

    "#\[img=(\S+?)\]#is" =>
    "<img src=\"$1\" alt=\"$1\" />",
);

// простые коды
$Codes["easy"] = array(
  // esc кодов с непосредственным html-эквивалентом
   "#\[\[(/?)(b|i|u|s|strike|small|center|pre|tt|sub|sup)\]\]#is"  => "&#91;$1$2&#93;",
  "#\[\[(br|hr)\]\]\n?#i" => "&#91$1&#93",

  // Коды с непосредственным html-эквивалентом
   "#\[(b|i|u|s|strike|small|center|pre|tt|sub|sup)\](.+?)\[/\\1\]#is" => "<$1>$2</$1>",
  "#\[br\]\n?#i" => "<br />",
  "#\[hr\]\n?#i" => "<hr width=\"40%\" align=\"left\" />",

  // (c) (r) and (tm)
  "#\(c\)#i"  => "&copy;",
  "#\(tm\)#i" => "&#153;",
  "#\(r\)#i"  => "&reg;",
);

// коды цитирования
$Codes["quote"] = array(
  // esc [q] [quote]
  "#\[\[(/?)(q|quote)\]\]#is" => "&#91;$1$2&#93;",
  "#\[\[(q|quote)=(\S+?)\]\]#is" =>"&#91;$1=$2&#93;",

  // [quote] без автора
  "#\[(q|quote)\](.*?)\[/\\1]#is" => "<blockquote class=\"title\">Цитата:</blockquote><blockquote class=\"body\">$2</blockquote>",

    // 
Цитата автор:
текст
 "#\[(q|quote)=(.*?)\](.*?)\[/\\1]#is" => "<blockquote class=\"title\">Цитата ([user=$2]):</blockquote><blockquote class=\"body\">$3</blockquote>", ); // коды ссылок $Codes["url"] = array(  // esc [url] [MAIL]  "#\[\[(/?)(url|mail)\]\]#is" => "&#91;$1$2&#93;",  "#\[\[(url|mail)=(\S+?)\]\]#is" =>"&#91;$1=$2&#93;",  // Безопасность: убираем потенциальные ссылки на скрипты (\s* - защита от IE)  "#\[(?:url|mail)=.*?s\s*c\s*r\s*i\s*p\s*t\s*:.*?\]#is" =>  "<font class=\"warning\">&laquo;предупреждение: скрипты в постах запрещены&raquo;</font>",  "#\[(url|mail)\].*?s\s*c\s*r\s*i\s*p\s*t\s*:.*?\[/\\1\]#is" =>  "<font class=\"warning\">&laquo;предупреждение: скрипты в постах запрещены&raquo;</font>",    // [url]    "#\[url]\s*?(?!.*?\[(?:url).*?)(.*?)\s*?\[/url\]#is" =>    "<a href=\"$1\">$1</a>",    "#\[url=(\S*?)\]\s*?(?!.*?\[(?:url).*?)(.*?)\s*?\[/url\]#is" =>    "<a href=\"$1\">$2</a>",    "#\[url=(\S*?)\]#is" =>    "<a href=\"$1\">$1</a>",    // [MAIL]    "#\[mail]\s*?(?!.*?\[(?:mail).*?)(.*?)\s*?\[/mail\]#is" =>    "<a href=\"mailto:$1\">$1</a>",    "#\[mail=(\S*?)\]\s*?(?!.*?\[(?:mail).*?)(.*?)\s*?\[/mail\]#is" =>    "<a href=\"mailto:$1\">$2</a>",    "#\[mail=(\S*?)\]#is" =>    "<a href=\"mailto:$1\">$1</a>", ); // коды для работы с текстом $Codes["font"] = array(  // esc Кодов свойств шрифта [font] (face), [size], [color], [right]:  "#\[\[(font|size|color)=(.+?)\]\]#is" => "&#91;$1=$2&#93;",    "#\[\[/(font|size|color|right)\]\]#i" => "&#91;/$1&#93;",  "#\[\[right\]\]#i"                    => "&#91;right&#93;",  // Коды свойств шрифта [font] (face), [size], [color], [right]:  "#\[font=(.+?)\](.+?)\[/font\]#is"         => "<font face=\"$1\">$2</font>",  "#\[(size|color)=(\S+?)\](.+?)\[/\\1\]#is" => "<font $1=\"$2\">$3</font>",  "#\[right\](.+?)\[/right\]#is"             => "<font align=\"right\">$1</font>", ); // коды info $Codes["info"] = array(  //esc info tags  "#\[\[info:version\]\]#is"       => "&#91;info:version&#93;",  "#\[\[info:author\]\]#is"        => "&#91;info:author&#93;",  "#\[\[info:random\]\]#is"        => "&#91;info:random&#93;",  "#\[\[info:random=(\d+?)\]\]#is" => "&#91;info:random=$1&#93;",  //info tags  "#\[info:version\]#is"           => "VParser 1.0.1",  "#\[info:author\]#is"            => "Vladislav Mokeev&#91;Vlad&#93;",  "#\[info:random\]#ise"           => "rand(0,100)",  "#\[info:random=(\d+?)\]#ise"    => "rand(0,$1)", ); // коды оффтопика $Codes["off"] = array(    // esc codes  "#\[\[(/?)off\]\]#is"  => "&#91;$1off&#93;",  // [off] - оффтопик  "#\[off\]\s*(.+?)\s*\[/off\]#is" => "<font class=\"offtopic\">оффтопик: $1</font>",  "#/\*\s*(.+?)\s*\*/#is"         => "<font class=\"offtopic\">оффтопик: $1</font>", ); //расширенные коды $Codes["added"] = array(    // esc codes    "#\[\[(user|def|acr|added)=(.+?)\]\]#is" => "&#91;$1=$2&#93;",    "#\[\[/(def|acr|added)\]\]#i"            => "&#91;/$1&#93",  "#\[\[(added|time|date)\]\]#i"           => "&#91;$1&#93;",  // Тег [user] - прямая ссылка на юзера  "#\[user=(.+?)\]#is" => "<a class=\"profile\" href=\"./profile.php?name=$1\">$1</a>",    // VParser 1.0.1: Теги [def] и [acr] - определение (всплывающая подсказка) для слова  "#\[def=(.+?)\]\s*(.+?)\s*\[/def\]#is" => "<a class=\"definition\" title=\"$1\">$2</a>",  "#\[acr=(.+?)\]\s*(.+?)\s*\[/acr\]#is" => "<acronym title=\"$1\">$2</acronym>",    // VParser 1.0.1:  "#\[added\](.+?)\[/added\]#is" => "<font class=\"added-title\">Добавлено:</font><br>$1",  "#\[added=(.+?)\](.+?)\[/added\]#is" => "<font class=\"added-title\">Добавлено ($1):</font><br>$2",  "#\[time\]#ie" => "'<span class=\"date\">'. date('G:i:s'). '</span>'",  "#\[date\]#ie" => "'<span class=\"time\">'. date('d.m.Y'). '</span>'", ); // коды для вырезания не пропарсенных тегов $Codes["delete"] = array(  // Удаление лишних (известных) тегов  "#\[/?(?:font|size|off|b|i|u|s|color|url|link|mail|img|image|center|right|pre|list|user|acr|def|info|time|date|debug|added).*?\]#is" => "", ); ?>
вот такие рег експы.
а вот так из надо применять:
Код: Выделить весь код
          foreach($Codes["url"] as $rule => $value)
            while ( preg_match( $rule, $raw ) )
              $raw = preg_replace($rule, $value, $raw, -1);
надеюсь снял все вопросы по данной теме?

PS
рег експы проверенный и вроде все баги пофиксены, и дыры тоже.

если что найдешь, то обязятельно напиши!

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 20:02, 14-01-2004 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Vlad Drakula, да, выглядит забавно, более того - красиво. Надеюсь тебя не сильно озадачит просьба выслать кусок кода мылом, дабы не мучиться мыслью, что форум что-ть не так отобразил?  Я покопаюсь еще...

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 06:56, 15-01-2004 | #3


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Все гуд! Спасибо  на счет глюков пообщаеемся...

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 14:31, 16-01-2004 | #4



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » PHP. Регулярные выражения и русские символы.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
регулярные выражения Ginger Вебмастеру 60 21-03-2012 01:11
[решено] PHP|регулярные выражения, preg_match morgan1991 Вебмастеру 11 10-03-2010 01:03
Разное - PHP - регулярные выражения: HELP GoldenOrb Программирование и базы данных 10 08-09-2008 16:47
PHP - регулярные выражения: HELP GoldenOrb Вебмастеру 13 18-07-2008 16:05
Регулярные выражения est Хочу все знать 6 02-10-2002 14:17




 
Переход