regex — PHP Preg Match All не удается при сопоставлении строки с HTML.

Я пытаюсь сопоставить имена классов в следующем.

<section className="content_main_container">
<article className="comment_user_propic">

Но только «article» className соответствует.

Я попробовал следующее.

function comments(){
$str = <<<EOT

'<section className="content_main_container">
<article className="comment_user_propic">'

EOT;

return $str;
}

class obfusicate {

function change($str, $prefix){

preg_match_all('#'.$prefix.'="(.*?)"#',$str,$parts);

$array_len          = count($parts[1]);
$class_count        = 0;
$c_array            = [];

foreach($parts[1] as $part){
$rand_name      = self::rand_g();
$c_array[$part] = $rand_name;

++$class_count;
$str_1      = str_replace($part, $rand_name, $str);
}

return ['array'=>$c_array, 'string'=>$str_1];
}
}

$obs        = new obfusicate;
$result     = $obs->change(comments(), 'className');

echo var_dump($result['string']);

0

Решение

Ваша ошибка здесь:

    foreach($parts[1] as $part){
$rand_name      = self::rand_g();
$c_array[$part] = $rand_name;

++$class_count;
$str_1      = str_replace($part, $rand_name, $str); //each time you start over replacing from $str and you lose your last $str_1 value
}

return ['array'=>$c_array, 'string'=>$str_1]; //Assigned after the loop so only the last $str_1 value is stored

РЕДАКТИРОВАТЬ: Посмотрите на мой комментарий в последней строке

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]