imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 20.09.2005, 17:52     # 1
Kvazi
Newbie
 
Регистрация: 24.01.2005
Сообщения: 24

Kvazi Путь к славе только начался
Помогите с регулярными выражениями

НУжно в тексте найти тэг: <table (+атрибуты)> и заменить на тэг

<table class="itemView">

Делаю:

$descr = eregi_replace("<table*[^<]>",'<table class="itemView">',$_POST['itemAnn']);

неработает.
Подскажите правильный вариант и по возможности - скажите где я ошибся...
Заранее спасибо
Kvazi вне форума  
Старый 20.09.2005, 18:00     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Я конечно не фанат ereg, но на первый взгляд (<table*[^<]>) ты задаёшь повтор буквы "e", а затем (<table*[^<]>) выделяешь всего один знак под все аттрибуты, т.к. не указал квантификатора. Правильный вариант будет наподобии: /\<table[^\>]*\>/
RaZEr вне форума  
Старый 01.10.2005, 15:41     # 3
Scary Zet
Junior Member
 
Аватар для Scary Zet
 
Регистрация: 08.07.2004
Адрес: Воронеж
Сообщения: 115

Scary Zet Нимб уже пробиваетсяScary Zet Нимб уже пробивается
Попробуй
$descr = eregi_replace("<table(.*)>",'<table class="itemView">',$_POST['itemAnn']);
__________________

Каждая мечта тебе дается вместе с силами, необходимыми для ее осуществления. Однако тебе, возможно, придется ради этого потрудиться.

Ричард Бах
Scary Zet вне форума  
Старый 01.10.2005, 18:13     # 4
Andrey Zak
Junior Member
 
Аватар для Andrey Zak
 
Регистрация: 27.08.2005
Адрес: spb.ru
Сообщения: 100

Andrey Zak Путь к славе только начался
Цитата:
Scary Zet:
$descr = eregi_replace("<table(.*)>",'<table class="itemView">',$_POST['itemAnn']);
можно еще "?" добавить перед (.*), чтоб также находить <table> без атрибутов. Пример, <table?(.*?)>
"?" после "*" нужен для того, чтобы найти вхождение до первой ">", а не до конца текста. Насколько я точно помню?
__________________
Сейчас кто-то получит яндексом по рамблеру и отлетит гугол.

Последний раз редактировалось Andrey Zak; 01.10.2005 в 18:17.
Andrey Zak вне форума  
Старый 01.10.2005, 22:42     # 5
Scary Zet
Junior Member
 
Аватар для Scary Zet
 
Регистрация: 08.07.2004
Адрес: Воронеж
Сообщения: 115

Scary Zet Нимб уже пробиваетсяScary Zet Нимб уже пробивается
Цитата:
Сообщение от Andrey Zak
можно еще "?" добавить перед (.*), чтоб также находить <table> без атрибутов. Пример, <table?(.*?)>
"?" после "*" нужен для того, чтобы найти вхождение до первой ">", а не до конца текста. Насколько я точно помню?
+, ?, * - это квантификаторы. АФАИК, они ставятся после символа\группы символов в единственном числе. + означает одно или более повторений. ? - ноль или одно повторение. * - ноль или более. Точка сама по себе означает любой символ.

АФАИК, <table?(.*?)> неверно синтаксически из за вопроса после звёздочки. А вопрос после "e" означает, что эта буква может отсутствовать, что неверно логически.

Цитата:
нужен для того, чтобы найти вхождение до первой ">", а не до конца текста
Тогда надо написать
$descr = eregi_replace("<table([^>]*)>",'<table class="itemView">',$_POST['itemAnn']);

[^>] означает любой символ кроме '>'.
__________________

Каждая мечта тебе дается вместе с силами, необходимыми для ее осуществления. Однако тебе, возможно, придется ради этого потрудиться.

Ричард Бах
Scary Zet вне форума  
Старый 02.10.2005, 12:08     # 6
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Scary Zet:
АФАИК, <table?(.*?)> неверно синтаксически из за вопроса после звёздочки.
Почему не верно-то? В данном контексте знак вопроса ограничивает жадность квантификатора *! И почти правильно писали
Цитата:
Andrey Zak:
нужен для того, чтобы найти вхождение до первой ">", а не до конца текста.
Только не до конца текста, а до последнего символа ">".

Ну и последнее: После е вопроск конечно не нужен, врядли встретится тег <tabl>. А вот про
Цитата:
Andrey Zak:
можно еще "?" добавить перед (.*), чтоб также находить <table> без атрибутов.
".*?" также будет соответствовать и пустому, так что в ту регу попадет и тег <table> без атрибутов.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 02.10.2005, 16:25     # 7
Andrey Zak
Junior Member
 
Аватар для Andrey Zak
 
Регистрация: 27.08.2005
Адрес: spb.ru
Сообщения: 100

Andrey Zak Путь к славе только начался
Цитата:
Hubbitus:
Только не до конца текста, а до последнего символа ">".
Все верно. Не правильно выразился.
Цитата:
Hubbitus:
Ну и последнее: После е вопроск конечно не нужен, врядли встретится тег <tabl>.
Две функции может иметь символ "?". В данном контексте он в роли квантификатора для метасимвола (.
Цитата:
? расширяет смысл метасимвола '(' , квантификатор, означающий ноль либо одно вхождение, квантификатор жадности
Источник: php.net
__________________
Сейчас кто-то получит яндексом по рамблеру и отлетит гугол.

Последний раз редактировалось Andrey Zak; 02.10.2005 в 16:31.
Andrey Zak вне форума  
Старый 02.10.2005, 22:57     # 8
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Andrey Zak:
Две функции может иметь символ "?". В данном контексте он в роли квантификатора для метасимвола (.
Не понял, и какой он квантификатор в данном случае перед "("?
Не могли бы вы пояснить тогда подробнее его смысл в конструкции "<table?(.*)?>"? Второй предельно понятен, а вот первый, кроме значения для буквы е "ноль или больше" никак не могу понять каое имеет.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 03.10.2005, 10:31     # 9
Andrey Zak
Junior Member
 
Аватар для Andrey Zak
 
Регистрация: 27.08.2005
Адрес: spb.ru
Сообщения: 100

Andrey Zak Путь к славе только начался
Цитата:
Hubbitus:
Не понял, и какой он квантификатор в данном случае перед "("?
Я привел цитату и указал ссылку на php.net. Попробуйте на примере все станет ясно. Я часто использовал данную конструкцию, правда в perl.
__________________
Сейчас кто-то получит яндексом по рамблеру и отлетит гугол.
Andrey Zak вне форума  
Старый 03.10.2005, 11:21     # 10
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Andrey Zak:
Я привел цитату и указал ссылку на php.net. Попробуйте на примере все станет ясно.
Дак я и хочу на примере попробовать - подставлю разные строки. Только не могу понять в данном случае что проверять-то!?? Не могли бы пояснить на данном примере?

И вообще, кстати, попробовал тут собственно то что так долго все обсуждают:
Код:
<?
$text = '<table align=right other_attr>dfgdfgb <table>dcfg';

$descr = eregi_replace('<table(.*?)>', '<table class="itemView">', $text);
var_dump($descr);
?>
Причем с "<table?(.*?)>" вместо "<table(.*?)>" то же самое.
Дак вот, на это выдается ошибка:
Warning: eregi_replace() [function.eregi-replace]: REG_BADRPT in /path/to/file/reg.php on line xxx
bool(false)

И нифига не заменяется соответственно...

Если честно, в POSIX-регулярных выражениях я не слишком силен, и не стал копаться как исправить, да и тормозные они к сожалению. ИМХО, лучше для данного случая юзать PCRE, с подобными же регами.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.

Последний раз редактировалось Hubbitus; 03.10.2005 в 11:24.
Hubbitus вне форума  
Старый 03.10.2005, 13:47     # 11
Andrey Zak
Junior Member
 
Аватар для Andrey Zak
 
Регистрация: 27.08.2005
Адрес: spb.ru
Сообщения: 100

Andrey Zak Путь к славе только начался
И впрямь как-то странно себя ведет. Что с ним, что без. Одно и тоже.
Код:
<?
$text = '<table align=right other_attr>dfgdfgb<table align=right other_attr> <table>dc<table align=right other_attr>fg';

preg_match_all("!<table(.*?)>!si", $text, $descr);
echo "<textarea rows=15 cols=65>";
print_r($descr);
echo "</textarea>";
?>
Залез в свои скрипты. Я ввел вас в заблуждение данной ссылкой. Хотя сам ни раз руководствовался именно этим источником.
$_ =~ /^http\:\/\/((.+)\:(.+)\@)?(.+)$/
Конструкция ()?, а не ?(). Может я, как-то не так читаю, или автором допущена ошибка (неточность)? Обычно я использую: "(куча все, что может и не появится при разборе)?" Специально проверил вариант ?() - ? работает проверки впереди идущего символа.
__________________
Сейчас кто-то получит яндексом по рамблеру и отлетит гугол.
Andrey Zak вне форума  
Старый 03.10.2005, 17:06     # 12
Jlamepok
Junior Member
 
Аватар для Jlamepok
 
Регистрация: 31.08.2003
Адрес: РБ, Гомель
Пол: Male
Сообщения: 120

Jlamepok Мелкий засранец
"#<table(.+?)>#is"

$text = preg_replace("#<table(.+?)>#is",...);
__________________
There is no fate but what we make for ourselves.
Jlamepok вне форума  
Старый 04.10.2005, 00:41     # 13
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Jlamepok:
preg_replace
О чем я и говорил - pcre, в POSIX-регулярных выражениях такая рега не работает! В PCRE-то понятно, все элементарно.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 22:22.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.