Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> массив для preg_replace_callback 
:(
    Опции темы
bars80080
Дата 8.6.2011, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



есть такая функция preg_replace, я могу в неё загнать массив строк поиска и массив строк результата:

Код

        $ar = array(
            '#\[b\](.+?)\[\/b\]#is', '#\[i\](.+?)\[\/i\]#is', '#\[s\](.+?)\[\/s\]#is', '#\[u\](.+?)\[\/u\]#is',
        );    
        $ag = array(
            '<strong>\\1</strong>', '<i>\\1</i>', '<s>\\1</s>', '<u>\\1</u>',
        );
        $text = preg_replace($ar, $ag, $text);


каким образом мне провернуть тот же манёвр с массивами для preg_replace_callback

Код

function call_back1($m) {
    var_dump($m);
}

$text = 'as fasd fasdf [size=10]asdf ret[/size] w wervbnc [font=12]vnn fg[/font] dgp fh p[[p[wer [size=14]askfd asfd[/size] al;sdfgsdgf';

$ar = array('#\[size=([0-9]+?)\](.+?)\[\/size\]#is', '#\[font=([0-9]+?)\](.+?)\[\/font\]#is');
$func = 'call_back1';
$text = preg_replace_callback($ar, $func, $text);

дамп входящих значений не слишком демонстрирует какой элемент сработал

Код

Array[3]
   0 => "[size=10]asdf ret[/size]"
   1 => "10"
   2 => "asdf ret"
Array[3]
   0 => "[size=14]askfd asfd[/size]"
   1 => "14"
   2 => "askfd asfd"
Array[3]
   0 => "[font=12]vnn fg[/font]"
   1 => "12"
   2 => "vnn fg"

в лучшем случае придётся парсить, что не есть гуд. проще делать несколько функций, но тогда такая возможность пропадает
PM MAIL WWW   Вверх
patap
Дата 8.6.2011, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



не знаю, правильно ли я понял...но как я понял, нужно в колбэке определять отработала регулярка, которая ищет font или size?

если да, то как вариант, взять size и font в скобки:
Код

$ar = array('#\[(size)=([0-9]+?)\](.+?)\[\/size\]#is', '#\[(font)=([0-9]+?)\](.+?)\[\/font\]#is');


результат будет таким, и можно будет проверять 2-й элемент
Код

array(4) {
  [0]=>
  string(24) "[size=10]asdf ret[/size]"
  [1]=>
  string(4) "size"
  [2]=>
  string(2) "10"
  [3]=>
  string(8) "asdf ret"
}

array(4) {
  [0]=>
  string(26) "[size=14]askfd asfd[/size]"
  [1]=>
  string(4) "size"
  [2]=>
  string(2) "14"
  [3]=>
  string(10) "askfd asfd"
}

array(4) {
  [0]=>
  string(22) "[font=12]vnn fg[/font]"
  [1]=>
  string(4) "font"
  [2]=>
  string(2) "12"
  [3]=>
  string(6) "vnn fg"
}




--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
bars80080
Дата 8.6.2011, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



да, наверное, именно то. под этот случай точно.




ещё хотел спросить одну штуку
там есть модификаторы #is, раньше я ставил ещё "U", так как почему-то думал, что это для utf-8. но как оказалось, он делает выражение жадным. проверил без, а затем с "u", вроде ютф текст пропускает нормально.

хотя, вроде для preg_replace с выражением типа /[^а-я]/u без "u" не обойтись

надо ли ставить какой-то модификатор на кодировки и при каких случаях?
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0433 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.