validate regular preg_match_all online ejemplos array php regex drupal shortcode

php - regular - Variables de extracción Regex de



regex php string (3)

Esto te dará lo que quieras.

$data = ''Irrelevant tekst... [sublimevideo class="sublime" poster="http://video.host.com/_previews/600x450/sbx-60025-00-da-ANA.png" src1="http://video.host.com/_video/H.264/LO/sbx-60025-00-da-ANA.m4v" src2="(hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-ANA.m4v" width="560" height="315"] ..more irrelevant text.''; $dat = array(); preg_match("//[sublimevideo (.+?)/]/", $data, $dat); $dat = array_pop($dat); $dat= explode(" ", $dat); $params = array(); foreach ($dat as $d){ list($opt, $val) = explode("=", $d); $params[$opt] = trim($val, ''"''); } print_r($params);

Anticipando el próximo reto que enfrentará con el procesamiento de códigos cortos, puede usar preg_replace_callback para reemplazar los datos cortos de etiquetas con su marcado resultante.

$data = ''Irrelevant tekst... [sublimevideo class="sublime" poster="http://video.host.com/_previews/600x450/sbx-60025-00-da-ANA.png" src1="http://video.host.com/_video/H.264/LO/sbx-60025-00-da-ANA.m4v" src2="(hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-ANA.m4v" width="560" height="315"] ..more irrelevant text.''; function processShortCode($matches){ // parse out the arguments $dat= explode(" ", $matches[2]); $params = array(); foreach ($dat as $d){ list($opt, $val) = explode("=", $d); $params[$opt] = trim($val, ''"''); } switch($matches[1]){ case "sublimevideo": // here is where you would want to return the resultant markup from the shorttag call. return print_r($params, true); } } $data = preg_replace_callback("//[(/w+) (.+?)]/", "processShortCode", $data); echo $data;

Después de migrar un poco de contenido de WordPress a Drupal, tengo algunos códigos cortos que necesito convertir:

Contenido de la cadena:

Irrelevante tekst ... [sublimevideo class = "sublime" poster = "http://video.host.com/_previews/600x450/sbx-60025-00-da-ANA.png" src1 = "http: // video. host.com/_video/H.264/LO/sbx-60025-00-da-ANA.m4v "src2 =" (hd) http://video.host.com/_video/H.264/HI/sbx- 60025-00-da-ANA.m4v "width =" 560 "height =" 315 "] .. texto más irrelevante.

Necesito encontrar todas las variables dentro del shortcode [sublimevideo ...] y convertirlo en una matriz:

Array ( class => "sublime" poster => "http://video.host.com/_previews/600x450/sbx-60025-00-da-FMT.png" src1 => "http://video.host.com/_video/H.264/LO/sbx-60025-00-da-FMT.m4v" src2 => "(hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-FMT.m4v" width => "560" height => "315" )

Y preferiblemente manejar múltiples instancias del shortcode.

Supongo que se puede hacer con preg_match_all () pero no he tenido suerte.


Puede usar el siguiente RegEx para hacer coincidir las variables:

$regex = ''/(/w+)/s*=/s*"(.*?)"/'';

Sugeriría que primero coincida con el código abreviado sublime y lo coloque en una cadena con el siguiente RegEx:

$pattern = ''//[sublimevideo(.*?)/]/'';

Para obtener las claves de matriz correctas utilicé este código:

// $string is string content you specified preg_match_all($regex, $string, $matches); $sublimevideo = array(); for ($i = 0; $i < count($matches[1]); $i++) $sublimevideo[$matches[1][$i]] = $matches[2][$i];

Esto devuelve la siguiente matriz: (la que ha solicitado)

Array ( [class] => sublime [poster] => http://video.host.com/_previews/600x450/sbx-60025-00-da-ANA.png [src1] => http://video.host.com/_video/H.264/LO/sbx-60025-00-da-ANA.m4v [src2] => (hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-ANA.m4v [width] => 560 [height] => 315 )


Como se describe en esta respuesta , le sugiero que permita que WordPress haga el trabajo por usted usando la función get_shortcode_regex() .

$pattern = get_shortcode_regex(); preg_match_all("/$pattern/",$wp_content,$matches);

Esto le dará una matriz que es fácil de usar y muestra los diversos códigos cortos y atributos afiliados en su contenido. No es el formato de matriz más obvio, así que imprímalo y échele un vistazo para que sepa cómo manipular los datos que necesita.