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.