Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как вытащить все параметры в textarea?
 
 автор: maxfade   (14.02.2011 в 09:28)   письмо автору
 
 

Добрый день, есть textarea из которой необходимо вытащить все параметры:
<textarea onkeypress="CaracMax(this, 20) ;" wrap="VIRTUAL" rows="0" cols="0" name="content_text" id="content_text" moslabel="Основной текст" mosreq="1" class="boss_required"></textarea>


Т.е. необходимо вытащить и onkeypress, wra, rows, cols, name, id, moslabel, mosreq, class.

Подскажите как лучше составить регулярное выражение, чтобы на выходе был массив:


Array
(
['onkeypress'] => 'CaracMax(this, 20) ;',
['wra'] => 'VIRTUAL',
['rows'] => 0,
['cols'] => 0,
['name'] => 'content_text',
['id'] => 'content_text',
['moslabel'] => 'Основной текст',
['mosreq'] => 1,
['class'] => 'boss_required'
)

  Ответить  
 
 автор: SHAman   (14.02.2011 в 09:49)   письмо автору
 
   для: maxfade   (14.02.2011 в 09:28)
 

Ну вот решение на перл. Сейчас переведу на php. Спасибо за интересную задачку. Напишу про нее пост.

my $content = <<'END';
<textarea onkeypress='CaracMax(this, 20) ;' wrap="VIRTUAL" rows="0" cols="0" name="content_text" id="content_text" moslabel="Основной текст" mosreq="1" class="boss_required"></textarea>
END

my ($area) = $content =~ /<textarea(.*?)>/;
my @pairs = grep {$_!~/^['"]$/} $area =~ /\b(\w+=(["'])[^\2]+?\2)/g;
my @attr;
foreach my $pair(@pairs)    {
    push @attr, map {$_=~s/(^['"]|['"]$)//g;$_;} split /\s*=\s*/, $pair;
}
my %attr = @attr;


Получаем
$VAR1 = {
          "name" => "content_text",
          "rows" => "0",
          "cols" => "0",
          "onkeypress" => "CaracMax(this, 20) ;",
          "mosreq" => "1",
          "wrap" => "VIRTUAL",
          "class" => "boss_required",
          "id" => "content_text",
          "moslabel" => "Основной текст"
        };

  Ответить  
 
 автор: maxfade   (14.02.2011 в 10:20)   письмо автору
 
   для: SHAman   (14.02.2011 в 09:49)
 

Спасибо, жду с нетерпением...

  Ответить  
 
 автор: SHAman   (14.02.2011 в 10:51)   письмо автору
 
   для: maxfade   (14.02.2011 в 09:28)
 

$content = '<textarea onkeypress=\'CaracMax(this, 20) ;\' wrap="VIRTUAL" rows="0" cols="0" name="content_text" id="content_text" moslabel="Основной текст" mosreq="1" class="boss_required"></textarea>';

preg_match("/<textarea(.*?)>/", $content, $area);
$area = $area[1];
preg_match_all("/\b(\w+=([\"'])[^\\2]+?\\2)/", $area, $pairs);
$pairs = $pairs[0];

function trim_quotes($data)    {
    $data = preg_replace("/(^['\"]|['\"]$)/","",$data);
    return $data;
}
$attrs = Array();
foreach($pairs AS $pair)    {
    $atr = array_map("trim_quotes", preg_split("/\s*=\s*/", $pair));
    $attrs[$atr[0]] = $atr[1];
}

print('<pre>');
print_r($attrs);
print('</pre>');

  Ответить  
 
 автор: maxfade   (14.02.2011 в 11:27)   письмо автору
 
   для: SHAman   (14.02.2011 в 10:51)
 

Спасибо, все работает....

  Ответить  
 
 автор: SHAman   (14.02.2011 в 11:40)   письмо автору
 
   для: maxfade   (14.02.2011 в 11:27)
 

Тут написано почему и как работает

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования