preg_replace_callback用于清理类和广告类

时间:2017-11-26 09:39:21

标签: php regex

我想在标题标签中清理双类attributs,如果找不到则添加一个...

示例:

<h1 class="test" class="test"> --> <h1 class="correct test">
<h1 class="test"> --> <h1 class="correct test">
<h1> --> <h1 class="correct">
<h2> --> <h2 class="correct">

我用正则表达式尝试了很多东西,但我还远没有一个有效的解决方案......

$content = preg_replace_callback( '#\<h[1-6]{.}*(class=")\>#i', function( $matches ) {
            var_dump($matches);
        }, $content );

我只是通过移动a)来纠正重复!!

$content = preg_replace_callback( '#(\<h[1-'.$this->options['hx_max_level'].'])(.*?)\>(.*)(<\/h[1-'.$this->options['hx_max_level'].']>)#i', function( $matches ) {
            var_dump($matches);
            if ( ! stripos( $matches[0], 'id=' ) ) :
                    $matches[0] = $matches[1] . $matches[2] . ' style="" id="' . sanitize_title( $matches[3] ) . '">' . $matches[3] . $matches[4];
            endif;
            return $matches[0];
        }, $content );

现在我只需要修改我的正则表达式来添加一个类...... 感谢

2 个答案:

答案 0 :(得分:0)

您可以使用Regex解决问题:

$reg = '/(<\w*[^>]*class=[^>]*)class="[^">]*"([^>]*>)/';
$text = '<h1 class="test" foo="bar" class="test" baz="bag"> --> <h1 class="correct test">
<h1 class="test"> --> <h1 class="correct test">
<h1> --> <h1 class="correct">
<h2> --> <h2 class="correct">';


$res = preg_replace_callback($reg, function ($matches) {
    if (count($matches) > 1) {
        return $matches[1].$matches[2];
    }
}, $text);
你需要

$res! 如果没有任何课程,那就添加一个...... [我正在编写代码]

答案 1 :(得分:-1)

我终于回答了我自己的问题:

$content = preg_replace_callback( '#(\<h[1-'.$this->options['hx_max_level'].'])(.*?)\>(.*)(<\/h[1-'.$this->options['hx_max_level'].']>)#i', function( $matches ) {
            if ( ! stripos( $matches[0], 'id=' ) ) :
                if(!preg_match('#(class=.)#i',$matches[2])){
                    $matches[2] = $matches[2].' class="ahxm_title"';
                } else {
                    $matches[2] = preg_replace('#(class=.)#i','$1ahxm_title ',$matches[2]);
                }                
                $matches[0] = $matches[1] . $matches[2] . ' id="' . sanitize_title( $matches[3] ) . '">' . $matches[3] . $matches[4];
            endif;
            return $matches[0];
        }, $content );

我已经更正了)这是重复的原因...... 我还为班级做了另一项治疗。 感谢您的帮助,如果我的问题不是很清楚(我的英语非常流利),感谢对不起 再见