Хитрая Регулярка

  • Автор темы DmbITpo
  • Дата начала
D

DmbITpo

#1
Здравствуйте. Столкнулся с задачей написания регулярки. Но никак не получается корректно выполнить. Всё близко, близко да не то. Может кто поможет. условие такое:
Надо из строк типа
{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="..." (т.е. получить ...).
Но учесть, что внутри кавычек могут быть другие кавычки...

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

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

typak

#2
Регулярку не знаю как написать (мб както с опережающей проверкой)
проще с использованием дополнительных функций пхп или можно было два раза пройти регулярным выражением, чтоб область поиска сузить.

Я бы так делал на скорую руку:
PHP:
<?php
$text='{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""}';
$pattern="#g text=\"([^=}]*)#i";
$poisk=preg_match_all($pattern,$text,$matches);
foreach ($matches[1] as $val)
{
echo substr($val,0,strrpos($val,"\""))."<br>";
}
?>
Получаем то шо надо:

hello words
hello "new" words
hello mine's "new"words
hello my words
hello my "words"