用于HTML标签转换的RegEx

use*_*065 3 html php regex regex-group regex-greedy

由于某些原因,我想转换包含以下内容的字符串

<p style=“text-align:center; others-style:value;”>Content</p>
Run Code Online (Sandbox Code Playgroud)

<center>Content</center>PHP。

文本对齐值可以为左,右或居中。还有其他样式时,我想省略它们。

如何在PHP中做到这一点?

编辑:

也许我对最初的问题不够清楚。我的意思是,我想与内容转换text-align:center到由包裹<center>,并用内容text-align:right由包裹<right>。而且,当没有文本对齐样式时,该div不需要任何换行。谢谢。

Emm*_*mma 10

您可以使用a preg_replace来这样做:

测试1:

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

var_dump($test);
Run Code Online (Sandbox Code Playgroud)

输出1:

它会返回:

string(24) "<center>Content</center>"
Run Code Online (Sandbox Code Playgroud)

正则表达式1:

RegEx将您的输入分为三个捕获组,其中可以将第一组和第三组分配给打开/关闭p标签。

在此处输入图片说明

正则表达式2:

如果需要,您可以使用此RegEx进一步扩展它,以获取其他可能需要的其他标签/引用/内容。它会将带有引号(“或”或'或')的所有标签分为五个组,其中第四组($4)是您的目标内容。(.*)

在此处输入图片说明

测试2

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

var_dump($test);
Run Code Online (Sandbox Code Playgroud)

正则表达式3

如果您希望获取样式中的任何特定属性,则此RegEx可能会有所帮助:

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

在此处输入图片说明

测试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);
Run Code Online (Sandbox Code Playgroud)

输出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>"
}
Run Code Online (Sandbox Code Playgroud)