Извлечение содержимого между кавычками "

Статус
В этой теме нельзя размещать новые ответы.

garlian

Новичок
Извлечение содержимого между кавычками "

Написал регулярное выражение
preg_match_all('/\"(.*)\"(*.)/i',$search,$matches)
Задача которого извлекать всё, что между " а также остально, что не между ними. Проблема в том, что у меня не получается извлечь, если будет написано так "search a" "search b" . Не могу получить в массив отдельно search a и search b
Как быть?

-~{}~ 09.08.07 11:28:

preg_match_all('/\"(.*)\"/Ui',$search,$matches) delaem tak, teper izvlekaet, no dopustim "search a" "search b" ddd ccc
nado ėto bi ddd ccc popal v otdelnij element massiva...
 

SiMM

Новичок
> explode не поможет
Значит Вы плохо описали задачу.
 

dimagolov

Новичок
SiMM, задача в "между кавычками". explode не даст ответа на вопрос начиналась строка с кавычки или нет, а значит неопределено четные или нечетные элементы массива содержат искомые данные.
 

WP

^_^
регуляркой задача решается
PHP:
preg_match_all('~"(.*?)(?:"|$)|([^"]+)~',$a,$m,PREG_SET_ORDER);
dimagolov
SiMM, задача в "между кавычками". explode не даст ответа на вопрос начиналась строка с кавычки или нет, а значит неопределено четные или нечетные элементы массива содержат искомые данные.
Жжошь.
PHP:
$a = '"in quotes" not in quotes "123""test"';
$e = explode('"',$a);
$result = array();
for ($i = 0,$s = sizeof($e); $i < $s; ++$i)
{
 if ($e[$i] === '') {continue;}
 $result[] = array('in_quotes' => $i % 2 != 0,'string' => $e[$i]);
}
var_dump($result);
/*array(4) {
  [0]=>
  array(2) {
    ["in_quotes"]=>
    bool(true)
    ["string"]=>
    string(9) "in quotes"
  }
  [1]=>
  array(2) {
    ["in_quotes"]=>
    bool(false)
    ["string"]=>
    string(15) " not in quotes "
  }
  [2]=>
  array(2) {
    ["in_quotes"]=>
    bool(true)
    ["string"]=>
    string(3) "123"
  }
  [3]=>
  array(2) {
    ["in_quotes"]=>
    bool(true)
    ["string"]=>
    string(4) "test"
  }
}
*/
 

b0d

Новичок
вдогонку, похожая ситуация:

есть текст:
<table class="ff">
<tag1>dfgdf</tag1>
<tag2>dfgdf</tag2>
<tag3>dfgdf</tag3>
<tr>
</table>

<table class="ff">
<tag1>dfgdf</tag1>
<tag2>dfgdf</tag2>
<tag3>dfgdf</tag3>
<tr>
</table>

<table class="ff">
<tag1>dfgdf</tag1>
<tag2>dfgdf</tag2>
<tag3>dfgdf</tag3>
<tr>
</table>
нужно вырезать всё что между <table class="ff"> и </table>.
Чтобы в каждом элементе массива было
<tag1>dfgdf</tag1>
<tag2>dfgdf</tag2>
<tag3>dfgdf</tag3>
я уже заколебался голову ломать:) там какаято проблема с переносм строки.
Последний вариант моих мучений:

preg_match_all('/<table class="ff">(.*)<\/tr>\n<\/table>/ims', $text);
результат: 1 элемент массива в котором все от первого вхождения <table до последнего </table>
Помогите плз, 4тый день бьюсь, вся работа встала.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху