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;