RegEx для преобразования тегов HTML - PullRequest
2 голосов
/ 16 апреля 2019

По некоторым причинам я хочу преобразовать строки, которые содержат

<p style=“text-align:center; others-style:value;”>Content</p>

до <center>Content</center> в PHP.

Значения выравнивания текста могут быть левыми, правыми или центральными. А когда есть другие стили, я хочу их опустить.

Как я могу это сделать в PHP?

Edit:

Может быть, я не был достаточно ясен в своем первоначальном вопросе. Я имею в виду, что я хочу преобразовать содержимое с text-align:center для переноса <center>, а содержимое с text-align:right для переноса <right>. И когда нет стиля выравнивания текста, мне не нужно никакого переноса для этого div. Спасибо.

1 Ответ

8 голосов
/ 16 апреля 2019

Вы можете использовать preg_replace для этого:

Тест 1:

$test = preg_replace('/(<.*”>)(.*)(<\/.*)/s', '<center>$2</center>', '<p style=“text-align:center; others-style:value;”>Content</p>');

var_dump($test);

Выход 1:

Возвращается:

string(24) "<center>Content</center>"

RegEx 1:

RegEx делит ваши входные данные на три группы захвата, где первая и третья группы могут быть назначены для открытия / закрытия p тегов.

enter image description here

RegEx 2:

Вы можете расширить его, если хотите, с помощью этого RegEx для любых других тегов/ цитаты / содержание, которое вы можете захотеть.Любые теги с любыми кавычками ("или" или "или") будут разделены на пять групп, где четвертая группа ( $ 4 ) - это ваш целевой контент. Этот тип RegEx обычно может быть полезен для единственного вхождения, кроместроки, так как он использует (.*).

enter image description here

Тест 2

$test = preg_replace('/<(.*)(\"|\”|\'|\’)>(.*)(<\/.*)/s', '<center>$4</center>', '<p style=“text-align:center; others-style:value;”>Content</p>');

var_dump($test);

RegEx 3

Если вы хотите получить какие-либо конкретные атрибуты в стиле, этот RegEx может помочь:

<(.*)(text-align:)(.*)(center|left|right|justify|inherit|none)(.*)(\"|\”|\'|\’)>(.*)(<\/.*)

enter image description here

Тест 3

$tags = [
    '0' => '<p style=“text-align:center; others-style:value;”>Content</p>',
    '1' => '<div style=‘text-align:left; others-style:value;’ class=‘any class’>Any Content That You Wish</div>',
    '2' => '<span style=\'text-align:right; others-style:value;\' class=\'any class\'>Any Content That You Wish</span>',
    '3' => '<h1 style=“text-align:justify; others-style:value;” class="any class">Any Content That You Wish</h1>',
    '4' => '<h2 style=“text-align:inherit; others-style:value;” class=“any class">Any Content That You Wish</h2>',
    '5' => '<h3 style=“text-align:none; others-style:value;” class=“any class">Any Content That You Wish</h3>',
    '6' => '<h4 style=“others-style:value;” class=“any class">Any Content That You Wish</h4>',
];

var_dump($tag);

$RegEx = '/<(.*)(text-align:)(.*)(center|left|right|justify|inherit|none)(.*)(\"|\”|\'|\’)>(.*)(<\/.*)/s';
foreach ($tags as $key => $tag) {
    preg_match_all($RegEx, $tag, $matches);
    foreach ($matches as $key1 => $match) {
        if (sizeof($match[0]) > 0) {
            $tags[$key] = preg_replace($RegEx, '<$4>$7</$4>', $tag);
            break;
        }

    }

}

var_dump($tags);

Выход 3

Будет возвращено:

array(7) {
  [0]=>
  string(24) "<center>Content</center>"
  [1]=>
  string(38) "<left>Any Content That You Wish</left>"
  [2]=>
  string(40) "<right>Any Content That You Wish</right>"
  [3]=>
  string(44) "<justify>Any Content That You Wish</justify>"
  [4]=>
  string(44) "<inherit>Any Content That You Wish</inherit>"
  [5]=>
  string(38) "<none>Any Content That You Wish</none>"
  [6]=>
  string(86) "<h4 style=“others-style:value;” class=“any class">Any Content That You Wish</h4>"
}
...