Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Получить данные и атрибута тэга


Автор: Gold Dragon 3.2.2012, 11:42
У меня есть строка

Код

style="float:left;width:100px;"


или
Код

style="float:left"



Мне нужно вытащить значение float

Помогите с регуляркой


я вот такое написал.. и соответственно не работает

Цитата

#float:(.*);$#i

Автор: krundetz 3.2.2012, 12:03
Gold Dragon, я бы сделал так, вытащил атребут через библиотеку работы с DOM структуройй, дальше при помощи explode разбилбы сначала на массив (i = > 'свойство:значение'), а задет на массив ('свойство' => "значение'), чтобы не заморачиваться с нежадными регулярками

Автор: $дмитрий 3.2.2012, 12:03
Код

preg_match("#float:([a-z]+);?#i", 'style=" float:left;width:100px;"', $arMath);
?><pre><?
print_r($arMath);

Автор: Gold Dragon 3.2.2012, 12:08
krundetz,  smile СУПЕР!!!


$дмитрий, спасибо! всё работает.. Я что я у себя не так сделал?

Автор: krundetz 3.2.2012, 12:14
Цитата(Gold Dragon @  3.2.2012,  12:08 Найти цитируемый пост)
что я у себя не так сделал? 

ты не указал того что нужно остановиться на первом входение ; их же может быть несколько в свойстве
Код

?

Автор: Gold Dragon 3.2.2012, 12:14
только я малость добавил...
Код

#float:([a-z]+)[;\"]?#i


Добавлено через 1 минуту и 30 секунд
krundetz, вопрос не в том что оставить, а в подходе... У тебя супер навороченный. Сколько в нём нужно функций применить? smile

Автор: krundetz 3.2.2012, 12:16
Цитата(Gold Dragon @  3.2.2012,  12:14 Найти цитируемый пост)
только я малость добавил...
Выделить всёкод PHP
1:
    
#float:([a-z]+)[;\"]?#i

что то мне говорит что ты ее сломал, счас гляну у себя

Добавлено @ 12:19
Цитата(Gold Dragon @  3.2.2012,  12:14 Найти цитируемый пост)
Сколько в нём нужно функций применить?

да я знаю два explode вместо одного preg_match, получение строки со стилями я несчитаю, так как ты же ее тоже получаешь, кстати не факт что мой вариант будет меделенее

Автор: Gold Dragon 3.2.2012, 12:19
я проверил у себя. работает.. Просто окончание может быть или ; или "

Добавлено через 4 минуты и 49 секунд
анннет.. где-то промашка... не работает если стиль заканчивается двойной кавычкой

Автор: krundetz 3.2.2012, 12:27
Цитата(krundetz @  3.2.2012,  12:16 Найти цитируемый пост)
счас гляну у себя

глянул, суть в принципе не меняется, но ты прав ты оставляешь двойную кавычку если искомые данные имеют вид
Код

style=" float:left"

кстати почему ты решил ее добавить? Не забудь что кавычки могут быть и одинарные.

Автор: Gold Dragon 3.2.2012, 12:33
всё... туплю по полной.. пятница smile

не нужны никакие проверки на ; и "
стиль в любом случае состоит только из латинских букв и заканчивается не буквой.. так что должно полностью работать это

Код

#float:([a-z]+)#i

Автор: $дмитрий 3.2.2012, 12:37
Цитата

Я что я у себя не так сделал? 

$ метка обозначает конец строки. Оно не подходит под первое условие и по идеи, захватит все что после "float:"
Второе условие тоже не выполниться, потому как регулярка ищет в конце символ ";", а его нет

Автор: Gold Dragon 3.2.2012, 12:48
$дмитрий, да, уже понял.. smile
всем спасибо.. тема закрыта

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)