Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хитрая регулярка 
:(
    Опции темы
DmbITpo
Дата 23.1.2012, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.4.2008

Репутация: нет
Всего: нет



Здравствуйте. Столкнулся с задачей написания регулярки. Но никак не получается корректно выполнить. Всё близко, близко да не то. Может кто поможет. условие такое:
Надо из строк типа 
{g text="hello words" prefix="title"}
{g text="hello "new" words" prefix="title"}
{g text="hello mine's "new"words" prefix="title"}
{g text="hello my words"}
{g text="hello my "words""}

вытащить всё, что находится между text="..." (т.е. получить ...).
Но учесть, что внутри кавычек могут быть другие кавычки...

Может есть какие варианты?

заранее спасибо!

Это сообщение отредактировал(а) DmbITpo - 23.1.2012, 18:23
PM MAIL   Вверх
$дмитрий
Дата 23.1.2012, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: нет
Всего: 45



А в prefix могут быть кавычки? Какие-то еще ключи бывают кроме text и prefix?
PM MAIL   Вверх
DmbITpo
Дата 24.1.2012, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.4.2008

Репутация: нет
Всего: нет



Цитата($дмитрий @ 23.1.2012,  22:02)
А в prefix могут быть кавычки? Какие-то еще ключи бывают кроме text и prefix?

в префиксе кавычек быть не может. Но кроме префикса могут быть ещё любые другие аргументы...
PM MAIL   Вверх
$дмитрий
Дата 24.1.2012, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: нет
Всего: 45



Цитата

Но учесть, что внутри кавычек могут быть другие кавычки...

Вот в этом вся проблема

Раздели задачу на 2 этапа
1. Обрезай все ключи кроме text
2. Получай текстовое описание, таким образом "#text=\"(.+)"\#"
PM MAIL   Вверх
Nigel
Дата 25.1.2012, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 20.11.2007

Репутация: нет
Всего: 19



как-то так
Код

$string = <<<EOD
{g text="hello words" prefix="title"}
{g text="hello "new" words" prefix="title"}
{g text="hello mine's "new"words" prefix="title"}
{g text="hello my words"}
{g text="hello my "words""}
EOD;

$pattern = '~g[^\s]*\s(?:text=\"(.+)\"(?=\s\w+=\".*\"))|(?:text=\"(.+)\")~';

preg_match_all($pattern, $string, $matches);

var_dump($matches);

пустые строчки, надеюсь, сам сможешь убрать.
PM MAIL   Вверх
ksnk
Дата 25.1.2012, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



DmbITpo, а что нужно-то? выковырять значение атрибута text или получить комплект всех атрибутов тега G? В значение атрибута может встретится символ '='? Значение атрибута обязательно заключено в кавычки?

Если нужно только закавыченное значение text, и = в значении не бывает то такая регулярка будет короче, чем у Nigel
Код

$pattern = '~text="([^=}]+)?"\s*(?:\w|})~';


 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0756 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.