Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

Rendom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Учебники регулярных выражений
 
Кто сможет составить выражение для такого случая:

Код:
 
<table border=0>
<tr>
   <td>blablablabla<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table></td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Нужно удалить из этого всего кусок "<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table>". Иными словами нужно вырезать текст от "<table" до "</table>" внутри которого есть строка "UNIQTEXT", но при этом не удалить лишнего. В результате должно получиться:

Код:
 
<table border=0>
<tr>
   <td>blablablabla</td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Всего записей: 115 | Зарегистр. 27-10-2002 | Отправлено: 23:26 17-05-2005 | Исправлено: AZJIO, 04:05 09-12-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vegaweb
локаль выставили?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:37 24-04-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
мм, нет, но если вводить например abcde то регулярка срабатывает. Все равно надо локаль?

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 23:55 24-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vegaweb

Цитата:
но если вводить например abcde то регулярка срабатывает. Все равно надо локаль?

на ascii локаль не нужна.. она нужна на тот набор символов, что идет выше 127 кода

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:36 25-04-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
можно подробнее?) что надо сделать чтобы отсечь все, кроме русских букв? что не так в моей регулярке?

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 00:51 25-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vegaweb

Цитата:
что надо сделать чтобы отсечь все, кроме русских букв? что не так в моей регулярке?

я же сказал - выставить локаль
www.php.net/setlocale
и определиться - текст и скрипт в уникоде или нет?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:52 25-04-2011 | Исправлено: Cheery, 00:53 25-04-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В кириллице.

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 01:04 25-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vegaweb

Цитата:
В кириллице.

ну так скажите системе об этом.. откуда она знает, к какой кодировке относятся символы с кодом выше 127 ?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:46 25-04-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
setlocale (LC_ALL, 'ru_RU');
не помогло..

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 02:29 25-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vegaweb
еще бы.. кодировку укажите.
если 1251, то  
setlocale (LC_ALL, array ('ru_RU.CP1251', 'rus_RUS.1251'));
если и это не поможет - показываем код и тексте

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:37 25-04-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не помогло.  
код

Код:
 
$_GET['name']='êâåðöèГ-';
setlocale (LC_ALL, array ('ru_RU.CP1251', 'rus_RUS.1251'));
if (!preg_match("/^[а-яА-ЯёЁ]/",$_GET['name']))
    {
        echo ('<div align="center" style="font-size: 14px; color: red;">Для проверки используйте только буквы русского алфавита.</div>');
    }


Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 20:56 25-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vegaweb
ваша регулярка проверяет есть ли хоть одна русская буква, надо наоборот
if (preg_match("/[^а-яА-ЯёЁ]/",$_GET['name']))

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:16 25-04-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
нет, наоборот пропускает только английские.

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 21:43 25-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vegaweb

Цитата:
нет, наоборот пропускает только английские.

где???
тот код, что я вам дал выше, пропускает только русский
if (preg_match("/[^а-яё]/i",$_GET['name']))

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:05 25-04-2011 | Исправлено: Cheery, 22:06 25-04-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да. сейчас заработало спасибо
 
Добавлено:
Наверное я как то не так понимаю работу preg_match
Мне казалось что это выглядит так:

Код:
 
if (!preg_match("/^[а-яА-ЯёЁ]/",$_GET['name'])) // если нет совпадений шаблона в строке  
    {
        echo ('<div align="center" style="font-size: 14px; color: red;">Для проверки используйте только буквы русского алфавита.</div>'); // выводим этот текст
    }  
 

на примере сайта php.net

Код:
 
 
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) { //если есть совпадение "php" в строке "PHP is the web scripting language of choice."
    echo "A match was found."; // то выводим что оно есть
} else {
    echo "A match was not found.";
}
 

сответственно, наоборот будет выглядеть как то так

Код:
 
 
if (!preg_match("/php/i", "PHP is the web scripting language of choice.")) { //если нет совпадения "php" в строке "PHP is the web scripting language of choice."
    echo "A match was not found."; // то выводим что его нет
} else {
    echo "A match was found.";
}
 

по крайней мере я долго жил с такой уверенность что это верно ...

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 22:13 25-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vegaweb

Цитата:
Мне казалось что это выглядит так:  

неправильно вам казалось.. это выражение /^[а-яА-ЯёЁ]/ сработает только если первая буква будет русской, поэтому if сработает только в случае первой буквы не являющей русской.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:58 25-04-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
все, понял я просто невнимателен,  
[^а-яё] то что Вы дали
^[а-яА-ЯёЁ] то что было у меня )
спасибо за помошь!

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 01:44 26-04-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
$table=preg_replace('#</?col.*>#siU','',$table);  
$table=preg_replace('#<table.*>#siU','<table>',$table);  
$table=preg_replace('#<tr.*>#siU','<tr>',$table);  
$table=preg_replace('#<td((?!(colspan|rowspan)).)*>#siU','<td>',$table);
$table=preg_replace('#<td[^>]+((colspan|rowspan)=[^\s>]+?)(|.*)>#siU','<td \\1 \\3>',$table);  
$table=preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $table);  

 
Не работает при одном условии - если colspan или rowspan стоит перед стилями и другими параметрами. Т.е. скрипт не трогает colspan\rowspan и пропускает всё что после них.
Если они стоят последними - всё ок.
 
Пример -  
Код:
<td colspan="8"  class="xl11712421" style="height:17.4pt;
  width:541pt">ГОСТ 530-2007</td>

Этот код останется без изменения.
 

Код:
 <td  class="xl11712421" style="height:17.4pt;
  width:541pt"  colspan="8">ГОСТ 530-2007</td>

Этот обработается правильно

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 11:03 27-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ra1n
а давайте сами? у меня и так дел полно..
вот, по быстрому, опять же не самое лучшее решение, но надоело возиться с регулярками

Код:
$table=preg_replace('#</?col.*>#siU','',$table);  
$table=preg_replace('#<table.*>#siU','<table>',$table);  
$table=preg_replace('#<tr.*>#siU','<tr>',$table);  
$table=preg_replace_callback('#<td(.*)>#siU','my_replace',$table);
$table=preg_replace("#(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+#", "\n", $table);  
echo $table;  
 
function my_replace($vals)
{
$val="<td".preg_replace('#\b[\w:]++(?<!colspan|rowspan)=(?:\'[^\']*+\'|"[^"]*+"|\S*+)#siU','',$vals[1]).">";        
return preg_replace('#\s{2,}#',' ',$val);
}


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:34 27-04-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 14:45 15-05-2011
gorakh

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите написать регулярное выражение для таблицы, количество строк может быть любое
</tr>
<tr class="odd">
<td>1</td>
<td><a href="">*</a></td>
<td><a href="">*</a></td>
<td><a href="">*</a></td>
<td><a href="">*</a></td>
</tr>
<tr class="even">
<td>2</td>
<td><a href="">*</a></td>
<td><a href="">*</a></td>
<td><a href="">*</a></td>
<td><a href="">*</a></td>
</tr>
итд

Всего записей: 22 | Зарегистр. 27-04-2006 | Отправлено: 18:18 17-05-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru