PHP preg_replace,仅替换匹配元素的子字符串

时间:2019-02-28 17:12:51

标签: php regex preg-replace

使用preg_replace,我可以将匹配的子字符串替换为另一个子字符串:

echo preg_replace("yellow", "blue", "sky is yellow");
// print "sky is blue"

但是是否可以将搜索字符串中的子字符串替换为另一个字符串?

例如,我想更改此文本:

<a>foo</a>
<a class="changehere">foo</a>
<a>foo</a>

通过

<a>foo</a>
<a class="changehere">FAA</a>
<a>foo</a>

我尝试过:

echo preg_replace("@<a class="changehere">(foo)</a>@", "FAA", $text);

但是整个生产线更改为FAA ... 我如何才能找到一个取决于其他字符的子字符串,并仅替换该子字符串?

感谢帮助:)! 我希望我很清楚

1 个答案:

答案 0 :(得分:0)

假设您不使用正则表达式解析HTML / XML,则可以使用此正则表达式:

import requests
from bs4 import BeautifulSoup

url = 'https://coinmarketcap.com/currencies/electroneum/'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html, 'html.parser')
soup.select_one('[data-currency-value]').text

详细信息:

  • php > $text = '<a class="changehere">FAA</a>'; php > echo preg_replace('@<a class="changehere">\Kfoo(?=</a>)@', "FAA", $text); <a class="changehere">FAA</a> :重设所有匹配的信息
  • \K:先行断言我们将(?=</a>)领先于当前位置