Пишу програмку по разбору 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>
ТАм в переменных я пропустил значки $, но это не меняет суть вопроса :)
>Пишу програмку по разбору 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>
отрицать единственный "недопустимый":
> <font[^>]+>[^<]+<\/font>
>должно сработать.
>
>По вопросу: правая квадратная скобка обязана быть первой в перечислении:
> []все_остальное]
>Кавычка, кажется, никаких особых мер не требует.Спасибо, с квадратной скобкой ясно, кстати, если нужны обе, то обе вперёд?
Отрицать символы, нежели набирать допустимые, конечно проще тут, но всётаки, если возникнет необходимость включить кавычки в набор, то как это сделать?
>отрицать единственный "недопустимый":
>> <font[^>]+>[^<]+<\/font>
>>должно сработать.
>>
>>По вопросу: правая квадратная скобка обязана быть первой в перечислении:
>> []все_остальное]
>>Кавычка, кажется, никаких особых мер не требует.
>
>Спасибо, с квадратной скобкой ясно, кстати, если нужны обе, то обе вперёд?Да нет... смотрите -- ']' синтаксически закрывает всю конструкцию; чтобы дать ей литеральное значение, нужны особые меры (в данном случае, позиционирование). '[', напротив, уже никакой роли не играет, и может стоять где ей хочется.
>Отрицать символы, нежели набирать допустимые, конечно проще тут, но всётаки, если возникнет
>необходимость включить кавычки в набор, то как это сделать?*Кажется*, ее никак особо экранировать не надо, но с понмелья чего только не покажется.
>Да нет... смотрите -- ']' синтаксически закрывает всю конструкцию; чтобы дать ей
>литеральное значение, нужны особые меры (в данном случае, позиционирование). '[', напротив,
>уже никакой роли не играет, и может стоять где ей хочется.Понял.
>>Отрицать символы, нежели набирать допустимые, конечно проще тут, но всётаки, если возникнет
>>необходимость включить кавычки в набор, то как это сделать?
>
>*Кажется*, ее никак особо экранировать не надо, но с понмелья чего только
>не покажется.Если кавычки никак не "экранировать", то это будет означать, что строковая фраза закончилась, что вызовет ошибку.