Ru-Board.club
← Вернуться в раздел «Web-программирование»

» PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Автор: Cheery
Дата сообщения: 22.04.2011 21:10
ra1n
терпение. у меня было, между прочим, почти 4 утра, когда я писал вам выше.


Код: $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);
Автор: ra1n
Дата сообщения: 24.04.2011 10:55
В очередной раз огромное спасибо! У меня даже интерес появился к PHP =)
Хочу сделать удобным использование - форма, вставляем код таблицы, нажимаем кнопку, получаем чистую таблицу.
Вопрос - это регулярные выражения универсальны? Вы можете привести ситуацию, пример таблицы, которую это регулярное выражение неправильно обработает?
Автор: Cheery
Дата сообщения: 24.04.2011 11:02
ra1n

Цитата:
это регулярные выражения универсальны?

что значит универсальны? они пишутся под какие то случаи, реализации.
под что то может и не сработать - для этого нужно знать все возможные реализации записей.
Автор: ra1n
Дата сообщения: 24.04.2011 11:18
Понял. Буду пробовать, время покажет. Вы можете посоветовать хороший ресурс с информацией по регулярным выражениям? Для тех кто абсолютно с ними не знаком?
Автор: Cheery
Дата сообщения: 24.04.2011 11:26
ra1n
без понятия. мне всегда хватало мануалов на php.net
Автор: ra1n
Дата сообщения: 24.04.2011 11:51
фуф... очередной вопрос...

Почему при передачи данных из формы результат отличается от результата при передачи данных из файла.

Вот что выдает...

Код: <td rowspan=\"3\" colspan=\"8\">Цены указаны с учетом доставки до
Москвы, точную стоимость продукции с доставкой на Ваш объект уточняйте у
менеджеров.</td>
Автор: Cheery
Дата сообщения: 24.04.2011 11:53
ra1n
какое это имеет отношение к данной теме?
читайте
www.php.net/stripslashes
ps: просто включены magic_quotes
Автор: ra1n
Дата сообщения: 24.04.2011 12:05
$result=stripslashes($table);

Ваш ps не понял, но вроде как я написал работает



Добавлено:
magic_quotes включены в настройках PHP видимо
Автор: vegaweb
Дата сообщения: 24.04.2011 22:33
Подскажите плиз, стоит регулярка

Код: if (!preg_match("/^[а-яА-ЯёЁ]/",$_GET['name']))
Автор: Cheery
Дата сообщения: 24.04.2011 22:37
vegaweb
локаль выставили?
Автор: vegaweb
Дата сообщения: 24.04.2011 22:55
мм, нет, но если вводить например abcde то регулярка срабатывает. Все равно надо локаль?
Автор: Cheery
Дата сообщения: 24.04.2011 23:36
vegaweb

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

на ascii локаль не нужна.. она нужна на тот набор символов, что идет выше 127 кода
Автор: vegaweb
Дата сообщения: 24.04.2011 23:51
Cheery
можно подробнее?) что надо сделать чтобы отсечь все, кроме русских букв? что не так в моей регулярке?
Автор: Cheery
Дата сообщения: 24.04.2011 23:52
vegaweb

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

я же сказал - выставить локаль
www.php.net/setlocale
и определиться - текст и скрипт в уникоде или нет?
Автор: vegaweb
Дата сообщения: 25.04.2011 00:04
В кириллице.
Автор: Cheery
Дата сообщения: 25.04.2011 00:46
vegaweb

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

ну так скажите системе об этом.. откуда она знает, к какой кодировке относятся символы с кодом выше 127 ?
Автор: vegaweb
Дата сообщения: 25.04.2011 01:29
setlocale (LC_ALL, 'ru_RU');
не помогло..
Автор: Cheery
Дата сообщения: 25.04.2011 01:37
vegaweb
еще бы.. кодировку укажите.
если 1251, то
setlocale (LC_ALL, array ('ru_RU.CP1251', 'rus_RUS.1251'));
если и это не поможет - показываем код и тексте
Автор: vegaweb
Дата сообщения: 25.04.2011 19:56
не помогло.
код

Код:
$_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>');
    }
Автор: Cheery
Дата сообщения: 25.04.2011 20:16
vegaweb
ваша регулярка проверяет есть ли хоть одна русская буква, надо наоборот
if (preg_match("/[^а-яА-ЯёЁ]/",$_GET['name']))
Автор: vegaweb
Дата сообщения: 25.04.2011 20:43
нет, наоборот пропускает только английские.
Автор: Cheery
Дата сообщения: 25.04.2011 21:05
vegaweb

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

где???
тот код, что я вам дал выше, пропускает только русский
if (preg_match("/[^а-яё]/i",$_GET['name']))
Автор: vegaweb
Дата сообщения: 25.04.2011 21:13
Да. сейчас заработало спасибо

Добавлено:
Наверное я как то не так понимаю работу preg_match
Мне казалось что это выглядит так:

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

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

неправильно вам казалось.. это выражение /^[а-яА-ЯёЁ]/ сработает только если первая буква будет русской, поэтому if сработает только в случае первой буквы не являющей русской.
Автор: vegaweb
Дата сообщения: 26.04.2011 00:44
все, понял я просто невнимателен,
[^а-яё] то что Вы дали
^[а-яА-ЯёЁ] то что было у меня )
спасибо за помошь!
Автор: ra1n
Дата сообщения: 27.04.2011 10:03

Код: $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);
Автор: Cheery
Дата сообщения: 27.04.2011 19:34
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);
}
Автор: ra1n
Дата сообщения: 15.05.2011 13:45
Спасибо
Автор: gorakh
Дата сообщения: 17.05.2011 17:18
Помогите написать регулярное выражение для таблицы, количество строк может быть любое
</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>
итд
Автор: gorakh
Дата сообщения: 18.05.2011 12:13
Помогите написать регулярное выражение для таблицы вытаскивающие то, что стоит на месте *, количество строк может быть любое
</tr>
<tr class="odd">
<td>1</td>
<td>*</td>
<td>*</td>
<td>*</td>
<td>*</td>
</tr>
<tr class="even">
<td>2</td>
<td>*</td>
<td>*</td>
<td>*</td>
<td>*</td>
</tr>
итд
Сам же и отвечаю

"<td>(.*)</td>[\s]*<td>(.*)</td>[\s]*<td>(.*)</td>[\s]*<td>(.*)</td>[\s]*<td>(.*)</td>"

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: Xitami Web Server + PHP+ zend optimizer


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.