URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2603
[ Назад ]

Исходное сообщение
"PHP & regular expressions"

Отправлено NetKnight , 26-Фев-04 19:50 
Пишу програмку по разбору HTML, встала такая задача:
Например выбрать фразу <font color=#00FFFF size=5>Some text</font>
вот что примерно должно быть кодом:


preg_match("/<font[a-zA-Z0-1 #=]+>[a-zA-Z0-1  _-,.]+<\/font>/",src,dst);

Вроде всё хорошо и правильно! Но в верхнем примере параметры не обрамляются кавычками! А как сделать так, чтоб среди символов, которые находятся в квадратных скобках оказались символы двойной кавычки и квадратной скобки? Пробовал вставлять со слешем - ошибка
Я не знаю, сколько параметров будет в данном теге, по этому мне надо написать так. Кто наступал на эти грабли?

Вот так выглядит пример строки которую надо выбрать: <font color="#00FFFF" size="5">Some text</font>


Содержание

Сообщения в этом обсуждении
"PHP & regular expressions"
Отправлено NetKnight , 26-Фев-04 19:52 
ТАм в переменных я пропустил значки $, но это не меняет суть вопроса :)

"PHP & regular expressions"
Отправлено vnp , 26-Фев-04 21:06 
>Пишу програмку по разбору HTML, встала такая задача:
>Например выбрать фразу <font color=#00FFFF size=5>Some text</font>
>вот что примерно должно быть кодом:
>
>
>preg_match("/<font[a-zA-Z0-1 #=]+>[a-zA-Z0-1  _-,.]+<\/font>/",src,dst);
>
>Вроде всё хорошо и правильно! Но в верхнем примере параметры не обрамляются
>кавычками! А как сделать так, чтоб среди символов, которые находятся в
>квадратных скобках оказались символы двойной кавычки и квадратной скобки? Пробовал вставлять
>со слешем - ошибка
>Я не знаю, сколько параметров будет в данном теге, по этому мне
>надо написать так. Кто наступал на эти грабли?

Это пока не ответ, а рекомендация. Из самых общих соображений надо не перечислять "допустимые" символы (которых _много_), а наоборот, отрицать единственный "недопустимый":
    <font[^>]+>[^<]+<\/font>
должно сработать.

По вопросу: правая квадратная скобка обязана быть первой в перечислении:
    []все_остальное]
Кавычка, кажется, никаких особых мер не требует.


>Вот так выглядит пример строки которую надо выбрать: <font color="#00FFFF" size="5">Some text</font>



"PHP & regular expressions"
Отправлено NetKnight , 27-Фев-04 02:55 
отрицать единственный "недопустимый":
>    <font[^>]+>[^<]+<\/font>
>должно сработать.
>
>По вопросу: правая квадратная скобка обязана быть первой в перечислении:
>    []все_остальное]
>Кавычка, кажется, никаких особых мер не требует.

Спасибо, с квадратной скобкой ясно, кстати, если нужны обе, то обе вперёд?
Отрицать символы, нежели набирать допустимые, конечно проще тут, но всётаки, если возникнет необходимость включить кавычки в набор, то как это сделать?


"PHP & regular expressions"
Отправлено vnp , 27-Фев-04 07:21 
>отрицать единственный "недопустимый":
>>    <font[^>]+>[^<]+<\/font>
>>должно сработать.
>>
>>По вопросу: правая квадратная скобка обязана быть первой в перечислении:
>>    []все_остальное]
>>Кавычка, кажется, никаких особых мер не требует.
>
>Спасибо, с квадратной скобкой ясно, кстати, если нужны обе, то обе вперёд?

Да нет... смотрите -- ']' синтаксически закрывает всю конструкцию; чтобы дать ей литеральное значение, нужны особые меры (в данном случае, позиционирование). '[', напротив, уже никакой роли не играет, и может стоять где ей хочется.

>Отрицать символы, нежели набирать допустимые, конечно проще тут, но всётаки, если возникнет
>необходимость включить кавычки в набор, то как это сделать?

*Кажется*, ее никак особо экранировать не надо, но с понмелья чего только не покажется.


"PHP & regular expressions"
Отправлено NetKnight , 27-Фев-04 12:04 

>Да нет... смотрите -- ']' синтаксически закрывает всю конструкцию; чтобы дать ей
>литеральное значение, нужны особые меры (в данном случае, позиционирование). '[', напротив,
>уже никакой роли не играет, и может стоять где ей хочется.

Понял.

>>Отрицать символы, нежели набирать допустимые, конечно проще тут, но всётаки, если возникнет
>>необходимость включить кавычки в набор, то как это сделать?
>
>*Кажется*, ее никак особо экранировать не надо, но с понмелья чего только
>не покажется.

Если кавычки никак не "экранировать", то это будет означать, что строковая фраза закончилась, что вызовет ошибку.