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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выбор "все кроме" 
:(
    Опции темы
kapusta
Дата 6.8.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 6.3.2005

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



Помогите составить регулярку для такого примера.

Код

[B]строка длинная[/B] //надо выбрать
[QUOTE]строка длинная[/QUOTE] //пропускаем


Т.е. регулярка должна выбирать все теги, кроме некоторых, попадающих в список исключений.
PM MAIL   Вверх
Добряк
Дата 6.8.2006, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.8.2006

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



При таком раскладе:
Код

<?php

$str = '[B]строка длинная[/B][QUOTE]строка длинная[/QUOTE]<b><script>';
ereg_replace("[^0-9a-zA-Z_]", "", $str);
echo $str;

?>

Выводит на экран:
Код

[B]строка длинная[/B][QUOTE]строка длинная[/QUOTE]

Вы это просили? А то как-то не совсем понятно...
PM MAIL   Вверх
kapusta
Дата 6.8.2006, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 6.3.2005

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



Не совсем.

Вот текст.
Код

Например, строка [B]строка длинная[/B] бла-бла-бла [QUOTE]строка длинная[/QUOTE] вот текст [U]строка длинная[/U]  еще текст [LOL]строка длинная[/LOL]  ну и конец.


Восле обработки регэкспом требуется получить только определенные теги вместе с их содержимым. Т.е. выделяем все теги, кроме некоторых. В данном примере, не нужно выделять [QUOTE] и [LOL]. Все остальные нужны.
Код

[B]строка длинная[/B]
[U]строка длинная[/U]

PM MAIL   Вверх
check
Дата 6.8.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: нет
Всего: 23



Может так?
Код

/\[[^QUOTE|LOL]\].*?\[\/[^QUOTE|LOL]\]/i


Это сообщение отредактировал(а) check - 6.8.2006, 22:40
PM MAIL   Вверх
Добряк
Дата 7.8.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.8.2006

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



Ух, ёмана! У меня вот так только заработало:
Код

<?php

$str = 'Например, строка [B]строка длинная[/B] бла-бла-бла [QUOTE]строка длинная[/QUOTE]
        вот текст [U]строка длинная[/U]  еще текст [LOL]строка длинная[/LOL]  ну и конец.';
$str = preg_replace("/\[LOL\](.*?)\[\/LOL\]|\[QUOTE\](.*?)\[\/QUOTE\]/i", "", $str);
echo $str;

?>

Наверное, есть более лучшие варианты, но я их не знаю  smile .
PM MAIL   Вверх
GiV
Дата 9.8.2006, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 13.7.2006
Где: rus|53

Репутация: 2
Всего: 9



Или исходя из задания так:
Код

$txt = 'Например, строка [B]строка длинная[/B] бла-бла-бла [QUOTE]строка длинная[/QUOTE]
        вот текст [U]строка длинная[/U]  еще текст [LOL]строка длинная[/LOL]  ну и конец.';
$txt = preg_match_all( "~\[(?:b|u|i)\].+?\[/(?:b|u|i)\]~is", $txt, $matches );

print_r($matches);

PM MAIL WWW ICQ   Вверх
kapusta
Дата 9.8.2006, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 6.3.2005

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



Спасибо за помощь, но все это не то. Не работают так, как того требует условие задачи.

Неужели никто не знает, как подобное организовать? Или подобной возможности в регэкспах нет в принципе?

Это сообщение отредактировал(а) kapusta - 9.8.2006, 19:16
PM MAIL   Вверх
Добряк
Дата 9.8.2006, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.8.2006

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



Код

<?php

$txt = 'Например, строка [B]строка длинная[/B] бла-бла-бла [QUOTE]строка длинная[/QUOTE]
        вот текст [U]строка длинная[/U]  еще текст [LOL]строка длинная[/LOL]  ну и конец.';
$txt = preg_match_all( "~\[(?:b|u|i)\].+?\[/(?:b|u|i)\]~is", $txt, $matches );

print_r($matches[0][0].$matches[0][1]);

?>

Так подойдёт?
PM MAIL   Вверх
kapusta
Дата 10.8.2006, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 6.3.2005

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



Добряк, твой регэксп выбирает только теги b, u и i. А мне надо немного другое. выбирать не заданные теги, а все, кроме заданных.
PM MAIL   Вверх
Добряк
Дата 10.8.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.8.2006

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



Цитата(kapusta @ 10.8.2006,  23:12)
Добряк, твой регэксп выбирает только теги b, u и i. А мне надо немного другое. выбирать не заданные теги, а все, кроме заданных.

Ну тогда чем не подошёл мой прошлый пример?
Код

<?php

$str = 'Например, строка [B]строка длинная[/B] бла-бла-бла [QUOTE]строка длинная[/QUOTE]
        вот текст [U]строка длинная[/U]  еще текст [LOL]строка длинная[/LOL]  ну и конец.';
$str = preg_replace("/\[LOL\](.*?)\[\/LOL\]|\[QUOTE\](.*?)\[\/QUOTE\]/i", "", $str);
echo $str;

?>

Здесь выбирается всё, кроме содержимого заданных тегов (LOL и QUOTE). smile 
PM MAIL   Вверх
kapusta
Дата 12.8.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 6.3.2005

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



Это тоже не совсем то. У тебя просто с помощью этого регэкспа вырезаются эти 2 тега, а остальные остаются.
PM MAIL   Вверх
GiV
Дата 14.8.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 13.7.2006
Где: rus|53

Репутация: 2
Всего: 9



Цитата(kapusta @  12.8.2006,  23:05 Найти цитируемый пост)
Это тоже не совсем то. У тебя просто с помощью этого регэкспа вырезаются эти 2 тега, а остальные остаются. 

ну так совмести два варианта.

Код

$txt = 'Например, строка [B]строка длинная[/B] бла-бла-бла [QUOTE]строка длинная[/QUOTE]
        вот текст [U]строка длинная[/U]  еще текст [LOL]строка длинная[/LOL]  ну и конец.';
$txt = preg_replace('/\[LOL\](.*?)\[\/LOL\]|\[QUOTE\](.*?)\[\/QUOTE\]/i', '', $txt);
$txt = preg_match_all( "~\[(?:[a-z]+)\].+?\[/(?:[a-z]+)\]~is", $txt, $matches );

print_r($matches);


PM MAIL WWW ICQ   Вверх
check
Дата 27.8.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: нет
Всего: 23



Что-то автор молчит, проблема решена или нет? 
По-моему нет,  ведь не требовалось вырезать из строки теги QUOTE и LOL.

PM MAIL   Вверх
ewolf
Дата 27.8.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 4
Всего: 18



Возможно, автору это уже не нужно, но кому-то другому пригодится.

Можно сделать так:

Код

<?php
    $exclude_list = array( 'QUOTE', 'CODE', );

    $exclude = implode('|', $exclude_list);

    $reg_exp = '/(?(?=\[('.$exclude.')\]).*?\[\/\1\]|\[(.*?)\](.*?)\[\/\2\])/mi';
    
    $str = '[B]строка ddd длинная[/B] //надо выбрать 
    [QUOTE]строка длинная[/QUOTE] [I]курсив[/I] //пропускаем';
    
    preg_match_all($reg_exp, $str, $matches, PREG_SET_ORDER);
    
    print_r($matches);
?>


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


 




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


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

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