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

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

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

Аватара для Ginger

Рыжая


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

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


Помогите, пожалуйста, составить рег. выражение:
Вот пример кода, который не работает:
Код: Выделить весь код
$text = "some text with image <img src=”../user_img/093470394746/image.gif”> goes here for testing purposes";
preg_match('/user_img\/ ? ([0-9]{12})\/ ',$text,$result);

foreach( $result as $v)
echo "res - ".$v;
суть заключается в том, что нужно в данном тексте найти название директории, состоящие исключительно из цифр, и которое _всегда_ находиться после «user_img/».
Вернуть его в переменную.
Количество цифр всегда 12. Читать нужно либо 12 цифр подряд, либо до forward slash «/».

-------
ХР, 2000, NT - BSOD (синие экраны смерти) русский перевод


Отправлено: 17:51, 21-12-2004

 

Аватара для Ginger

Рыжая


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

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


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

-------
ХР, 2000, NT - BSOD (синие экраны смерти) русский перевод


Отправлено: 16:38, 27-01-2005 | #11



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

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


Аватара для vadimiron

Ветеран


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

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


Цитата:
вот так делаю.
Код:
$searches = array("[\']","/\sclass=((['\"]\w{0,50}['\"])|(\w{0,50}))/");
$replaces = array("`", "");
$text = preg_replace($searches,$replaces,$text);
Так в этом случае сначало меняются кавычки, а уже потом идёт поиск по паттерну, я же не учитывал ещё и такой вид ковычек, как `
Надо либо поменять местами, либо лучше было бы дописать такой вид ковычек в ['\"], попробуй вот так:

PHP код: Выделить весь код

$searches = array("[\']","/\sclass=(([`'\"]\w{0,50}[`'\"])|(\w{0,50}))/");

$replaces = array("`""");
$text preg_replace($searches,$replaces,$text); 

-------
Fortes fortuna adiuvat


Отправлено: 23:49, 27-01-2005 | #12


Ветеран


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

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


в 1 случае у меня получилось:
PHP код: Выделить весь код

$text "some text with image <img src=”../user_img/093470394746/image.gif”> goes here for testing purposes";

preg_match('/\w+\/(\d+)\// ',$text,$result);
print 
$result[1]; 

во 2 случае:
PHP код: Выделить весь код

$text="<p class = \"amega\" align = center>";

$text=preg_replace('/(.*) class(\s+)?=(\s+)?(\"|\'|\`)?(\w+)(\"|\'|\`)?(.*)/'"\\1\\7"$text);
print 
$text

Это будет работать вне зависимости от того:
1) есть ли после p class="amega" закрыващий тэг или нет
2) строка заключена в ' или в " или в ` или без кавычек
3) есть ли перед и после = пробелы вне зависимости от их количества

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

Последний раз редактировалось mrcnn, 28-01-2005 в 09:29.


Отправлено: 08:43, 28-01-2005 | #13


Аватара для vadimiron

Ветеран


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

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


mrcnn
Одно только замечание, (.*) обознаечает, насколько я понимаю, бесконечное повторение любого элемента, предположим переменная $text содержит целую страницу HTML, где-то 5000 знаков, и первый class попадается только на 3000-чном знаке, тогда внутренняя переменная $1 функции preg_replace будет содержать все знаки до этого 3000-чного, что является не очень эффективным способом поиска, к этому надо ещё прибавить, что фугкции регулярок и без того притормаживают, так что я посоветовал бы искать напрямую class, и заменять его пустым знаком (то есть удалять)

-------
Fortes fortuna adiuvat


Отправлено: 13:20, 28-01-2005 | #14


Ветеран


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

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


vadimiron:
Да, Вы абсолютно правы, с этой точки зрения не совсем эффективно.
И у меня появилось еще одно собственное замечание - если в строке несколько паттернов
(например, $text = "<p class = \"lala\" align='center'>klmn oprst</p> <p class = \"lala\" align='center'>klmn oprst</p>" ; )
, то заменен будет только один из них.

Итого, с учетом обоих замечаний, получается так:
while (preg_match('/class(\s+)?=/', $text)){
$text=preg_replace('/ class(\s+)?=(\s+)?(\"|\'|\`)?(\w+)(\"|\'|\`)?/', "", $text);
}

Отправлено: 13:47, 28-01-2005 | #15


Аватара для Ginger

Рыжая


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

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


mrcnn
на скол'ко я поняла этот код:
'/ class(\s+)?=(\s+)?(\"|\'|\`)?(\w+)(\"|\'|\`)?/'
не учитывает того, что класс может быт' написан заглавными буквами?

тепер если я хочу ещё и style искат'? тогда нужно так?:
'/ (class|style)(\s+)?=(\s+)?(\"|\'|\`)?(\w+)(\"|\'|\`)?/'

-------
ХР, 2000, NT - BSOD (синие экраны смерти) русский перевод


Отправлено: 18:04, 01-02-2005 | #16


Ветеран


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

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


Ginger
Цитата:
на скол'ко я поняла этот код:
'/ class(\s+)?=(\s+)?(\"|\'|\`)?(\w+)(\"|\'|\`)?/'
не учитывает того, что класс может быт' написан заглавными буквами?
Да, не учитывает. Чтобы учитывал, нужно добавить модификатор i в конец

'/ class(\s+)?=(\s+)?(\"|\'|\`)?(\w+)(\"|\'|\`)?/i'

Цитата:
тепер если я хочу ещё и style искат'? тогда нужно так?:
'/ (class|style)(\s+)?=(\s+)?(\"|\'|\`)?(\w+)(\"|\'|\`)?/'
Все верно

Отправлено: 04:14, 02-02-2005 | #17


Аватара для Ginger

Рыжая


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

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


Вот полностью аррей с прегами. Рабочий вариант.

$searches = array("[\']","'<h[4-5][^>]*?>'si","'</h[4-5]>'is","'<h[1-3][^>]*?>'si","'</h[1-3]>'si","'<hr[^>]*?>'si", '/ (class|style)(\s+)?=(\s+)?(\"|\\\"|\'|\`|\\\`)?(\w+)(\"|\\\"|\'|\`|\\\`)?/si');
$replaces = array("`" ,"<h4>" ,"</h4>" ,"<h3>" ,"</h3>" ,"<hr size=\"1\">","");
$text = preg_replace($searches,$replaces,$text);

Do:
<pre CLASS=KLMN>Proveriaem rabotu pregov</pre>
<p class="klmn">Etot s kavychkami</p>
<p class=clas>Etot class bez kovychek</p>
<p class='clas'>Etot class s odinarnymi kovychkami</p>
<pre STYLE=KLMN>Proveriaem rabotu pregov</pre>
<p style="klmn">Etot s kavychkami</p>
<p style=clas>Etot class bez kovychek</p>
<p style='clas'>Etot class s odinarnymi kovychkami</p>

Posle:
<pre>Proveriaem rabotu pregov</pre>
<p>Etot s kavychkami</p>
<p>Etot class bez kovychek</p>
<p>Etot class s odinarnymi kovychkami</p>
<pre>Proveriaem rabotu pregov</pre>
<p>Etot s kavychkami</p>
<p>Etot class bez kovychek</p>
<p>Etot class s odinarnymi kovychkami</p>

А в моём скрипте текст берётся из формы и обрабатывается прегами

Я балда, что сразу об этом не сказала..
Просто сегодня копалась с addslashes() stripslashes() и за одно всё же посмотрела, как работает $_POST – выяснила, что он автоматом слаши добавляет…

Спасибо огромное mrcnn, vadimiron, что помогли составить преги. ) (k)

-------
ХР, 2000, NT - BSOD (синие экраны смерти) русский перевод


Отправлено: 19:39, 02-02-2005 | #18


Аватара для Prisoner

Engrossed by the Void


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

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


Ginger, маленькая ремарочка. Слэши в приходящие данные будут вставляться в соответствии с установками в php.ini:
Цитата:
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

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


Отправлено: 08:49, 03-02-2005 | #19


Аватара для Ginger

Рыжая


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

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


Prisoner
это я уже знаю. )
тол'ко на сервере ини редактироват нет возможности )


ALL
)
если желание ест' давайте усложним задачу?

стили и класс нужно удалят' везде кроме тага <pre>

я знаю, что нужно испол'зоват ^ , но не знаю как )

-------
ХР, 2000, NT - BSOD (синие экраны смерти) русский перевод


Отправлено: 15:07, 04-02-2005 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Java - Регулярные выражения Java ValVlaGen Программирование и базы данных 0 19-10-2009 08:06
Прочее - grep регулярные выражения dogidogi Общий по Linux 8 28-05-2009 22:54
Разное - 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




 
Переход