Php 正则表达式替换HTML字符串?

Php 正则表达式替换HTML字符串?,php,regex,Php,Regex,这是我的字符串: <ol> <li> <a rel="nofollow" href="http://127.0.0.1/index.php/something?price=3%2C25"><span class="price">50,00€</span> - <span class="price">75,00€</span></a> (38) </li>

这是我的字符串:

<ol>
    <li>
        <a rel="nofollow" href="http://127.0.0.1/index.php/something?price=3%2C25"><span class="price">50,00€</span> - <span class="price">75,00€</span></a> (38)
    </li>
    <li>
        <a rel="nofollow" href="http://127.0.0.1/index.php/something?price=4%2C25"><span class="price">75,00€</span> - <span class="price">100,00€</span></a> (11)
    </li>
</ol>

  • (38)
  • (11)
  • 我想换一个

    <span class="price">50,00€</span> - <span class="price">75,00€</span>
    
    <代码>50,00欧元-75,00欧元 用“foobar”和

    75,00欧元-100,00欧元
    
    以“foobar2”为例。知道用什么替换哪一行的唯一方法是URL中的price=3或price=4部分

    因此,替换后,字符串应如下所示:

    <ol>
        <li>
            <a rel="nofollow" href="http://127.0.0.1/index.php/something?price=3%2C25">foobar</a> (38)
        </li>
        <li>
            <a rel="nofollow" href="http://127.0.0.1/index.php/something?price=4%2C25">foobar2</a> (11)
        </li>
    </ol>
    
    
    
  • (38)
  • (11)
  • 我试过preg_replace,但它总是有太多的字符串。想法


    谢谢你的帮助

    如果您希望根据某种键更改内容,我建议使用数组保存值

    <?php
    
    $foo_array = array(3 => 'foobar', 4 => 'foobar2');
    

    简单:不要在html上使用正则表达式。这是一个简单的操作,它是PHP标准吗?它在PHP网站上,不是吗?用克利夫兰家族的话来说:
    No,No,noooooo可能重复的
    
    <?php
    
    $foo_array = array(3 => 'foobar', 4 => 'foobar2');
    
    $string = '<ol>
        <li>
            <a rel="nofollow" href="http://127.0.0.1/index.php/something?price=3%2C25"><span class="price">50,00€</span> - <span class="price">75,00€</span></a> (38)
        </li>
        <li>
            <a rel="nofollow" href="http://127.0.0.1/index.php/something?price=4%2C25"><span class="price">75,00€</span> - <span class="price">100,00€</span></a> (11)
        </li>
    </ol>';
    
    $new_string = preg_replace_callback('/(price=(3|4)([A-Z0-9%]+)">)(.*?)(<\/a>)/ms', function ($m) use ($foo_array) {return "$m[1]".$foo_array[$m[2]]."$m[5]";}, $string);
    
    print $new_string;
    
    $dom_document = new DOMDocument(); // CREATE A NEW DOCUMENT
    $dom_document->loadHTML($string); // LOAD THE STRING INTO THE DOCUMENT
    $links = $dom_document->getElementsByTagName('a'); // PULL OUT THE LINKS OUT OF THE DOCUMENT
    
    // LOOP THROUGH EACH LINK
    foreach ($links AS $link) {
    
        // IF WE FIND A 3 OR A 4 AFTER price=, THEN, REPLACE THE TEXT OF 
        // - THE LINK (THE nodeValue) WITH THE ITEM FROM THE ARRAY
        if (preg_match('/price=(3|4)/ms', $link->getAttribute('href'), $m)) {
            $link->nodeValue = $foo_array[$m[1]];
        }
    
    }
    
    $new_string_2 = $dom_document->saveHTML(); // WRITE THE CHANGES TO A STRING
    
    print $new_string_2;