expresión regular para encontrar todas las subcadenas dentro de comillas dobles php

Tengo una gran base de datos que tiene campos de párrafos con el formato siguiente:

["Esta es la primera oración", "Esta es la segunda oración", "Esta es la tercera oración", "Esta es la cuarta oración"]

Me gustaría extraer (usando PHP) y ponerlos en una matriz donde cada elemento de la matriz es una oración. Ahora mismo, estoy usando esto:

$trim_joined = substr($joined, 2, -2); //gets rid of the first and last bracket and double quote
$sentences = explode('", "', $trim_joined);

Parece un poco frágil porque no estoy 100% seguro de que este campo siga exactamente el mismo formato para cada fila de la base de datos (más de 350,000 filas). Me preguntaba si hay una expresión regular que extrae TODOS los elementos de las cadenas que están entre comillas dobles y los coloca en una matriz. De esta manera, no tengo que preocuparme si hay entradas sin los corchetes al principio y al final.

Desafortunadamente, ahora tengo poco o nada sobre expresiones regulares, así que pido ayuda. Gracias por adelantado

preguntado el 28 de agosto de 11 a las 03:08

Podrías hacerlo eval() sobre todo, pero no hay garantía de que un usuario malintencionado no pueda usarlo en su contra. -

2 Respuestas

Si el formato fuera coherente, podría usar json_decode - ya que las filas son prácticamente listas de cadenas. Lo probaría totalmente primero, incluso si se ejecuta durante unos minutos.

De no ser así, puede utilizar un sistema algo más robusto. CSV analizador, después de simplemente triming los corchetes (yo conjeturaría que ese es el enfoque óptimo aquí):

 $strings = str_getcsv(trim(trim($row, "["), "]"));

La solución de expresiones regulares más simple sería:

 preg_match_all('/"([^"]*)"\K/', $row, $strings);

Respondido 28 ago 11, 07:08

estos también funcionan ... podría usarlos porque todavía no estoy seguro de que todas las entradas sigan exactamente la misma estructura y estos adornos no pueden hacer daño si no coinciden - rzaidi

Aquí hay una forma sin expresiones regulares:

Podrías usar json_decode():

<?php
$data='["This is the first sentence", "This is the second sentent", "This is the third sentence", "This is the fourth sentence"]';
$arr=json_decode($data,true);
print_r($arr);
?>

Respondido 28 ago 11, 07:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.