За последние 24 часа нас посетили 17890 программистов и 1286 роботов. Сейчас ищут 1457 программистов ...

нужно достать значение аттрибута style в html-тегах.

Тема в разделе "Регулярные выражения", создана пользователем nuke_exp, 23 июл 2007.

  1. nuke_exp

    nuke_exp Активный пользователь

    С нами с:
    20 июл 2007
    Сообщения:
    4
    Симпатии:
    0
    Для примера:
    Есть тег
    HTML:
    1. <TABLE style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1 style="mso-spacerun: yes" width=75 style="mso-tab-count: 3">
    Нужно достать оттуда все style'ы c их содержимым от одной двойной кавычки до другой.
    т.е.
    Код (Text):
    1. style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext"
    Код (Text):
    1. style="mso-spacerun: yes"
    Код (Text):
    1. style="mso-tab-count: 3"
    Пробую шаблон
    style=[\x22][a-zA-Z0-9]{*}[\x22]
    но, разумеется, он не работает, поскольку я нуб в регекспах и наверняка напортачил.
    Если не сложно, подскажите, пожалуйста, правильный вариант решения задачи.
    Заранее спасибо.
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Код (Text):
    1. #style="(.*)"#Usi
     
  3. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    nuke_exp
    забудьте про жирный шрифт. юзайте bbcode
     
  4. dkrnl

    dkrnl Активный пользователь

    С нами с:
    24 июл 2007
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    Красноярск
    "~style\\s*=\\s*\"([^\"]+)\"~is"
    "~style\\s*=\\s*'([^']+)'~is"

    я так понимаю вы пытаетсь бороться с word разметкой после paste в визуальный редактор
    для этих целей советую tidy расширение или библиотеку htmlpurifier
     
  5. nuke_exp

    nuke_exp Активный пользователь

    С нами с:
    20 июл 2007
    Сообщения:
    4
    Симпатии:
    0
    Спасибо огромное! Выводит всё в виде:
    Код (Text):
    1. Array
    2. (
    3.     [0] => Array
    4.         (
    5.             [0] => style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext"
    6.             [1] => style="mso-spacerun: yes"
    7.             [2] => style="mso-tab-count: 3"
    8.             [3] => style="mso-ansi-language: EN-US"
    9.         )
    10.     [1] => Array
    11.         (
    12.             [0] => BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext
    13.             [1] => mso-spacerun: yes
    14.             [2] => mso-tab-count: 3
    15.             [3] => mso-ansi-language: EN-US
    16.         )
    17. )
    Но можно немножко разжевать? =)
    Зачем значок диеза (#) перед "style"?
    И зачем он нужен перед параметрами U,s, i? Разве параметры не отделяются от самого шаблона слэшем? После прочтения мануала я для себя понял, что "#" используется как символ, открывающий комментарий. Но здесь он работает явно не как открытие комментария. А.... или он используется как разделитель, о чём и свидетельствует его наличие впереди слова "style"?
    И ещё вопросик - а зачем используется параметр "s"? Ведь он же
    Осветите эти вопросы, пожалуйста, если не сложно.

    Пробовал, не работает. Хм?

    Вы совершенно верно подметили - интересует как раз таки чистка html-документа после того, как Word наполняет его ненужными параметрами аттрибута style и прочими мусорными тэгами.
    htmlpurifier глянул, правда, не дотошно - вроде бы для этих целей он подходит слабовато, похоже, он может отключать аттрибуты "style" но - разом. К сожалению, даже времени разбираться нет, т.к. его уйдет больше на то, чтобы понять, что он непригоден и для его модификации, нежели написать свой скрипт, который и пишу.
    Tidy существует вроде только для PHP5, установка и использование которой пока не представляется возможным.
    Если не сложно, чуть-чуть разжуйте Ваш вариант шаблона, пожалуйста. По сравнению с вариантом Sergey89 Ваша конструкция выглядит куда как более громоздкой и (для нуба) сложной. К тому же, у меня она не заработала ни в одном из представленных вариантов.
    Заранее спасибо.
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Два диеза - это ограничители регулярного выражения. Вобще в PCRE принято использовать в качестве ограничителя прямой слеш, но можно отступить от правил и использовать другие пары символов. s после диеза - это модификатор шаблона, который указывает на то, что текст будет обработан как одна строка.
     
  7. nuke_exp

    nuke_exp Активный пользователь

    С нами с:
    20 июл 2007
    Сообщения:
    4
    Симпатии:
    0
    Sergey89, премного благодарен.