Php 查找并替换可能部分位于html标记内的字符串

Php 查找并替换可能部分位于html标记内的字符串,php,html,regex,preg-replace,html-parsing,Php,Html,Regex,Preg Replace,Html Parsing,请任何人提出以下问题的可能解决方案 例如,我有一个字符串“Suspendisse potenti” 我需要在一些html中搜索字符串,并将其包装在span标记中: 所以 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque scelerisque neque in eros convallis egestas. Phasellus lacus massa, laoreet cursus s

请任何人提出以下问题的可能解决方案

例如,我有一个字符串“Suspendisse potenti”

我需要在一些html中搜索字符串,并将其包装在span标记中:

所以

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque 
scelerisque neque in eros convallis egestas. Phasellus lacus massa, 
laoreet cursus scelerisque id, posuere ac mauris. In hac habitasse 
platea dictumst. Aenean eros dui, congue ut ultrices vitae, convallis
quis felis. Ut non ante non nunc tempus ultrices et et ipsum. 
Suspendisse potenti. In sed mauris vel nibh dapibus 
pellentesque eu id dolor. Morbi dictum quam eleifend ante mattis rutrum. 
Mauris nisl ligula, consectetur eget gravida vel, varius vel metus. 
Nullam a ante metus.</p>
或者使用搜索词和标记中的额外文本

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque 
scelerisque neque in eros convallis egestas. Phasellus lacus massa, 
laoreet cursus scelerisque id, posuere ac mauris. In hac habitasse 
platea dictumst. Aenean eros dui, congue ut ultrices vitae, convallis
quis felis. Ut non ante non nunc tempus ultrices et et ipsum. 
Suspendisse <a href="/link">potenti In sed</a> mauris vel nibh dapibus 
pellentesque eu id dolor. Morbi dictum quam eleifend ante mattis rutrum. 
Mauris nisl ligula, consectetur eget gravida vel, varius vel metus. 
Nullam a ante metus.</p>
Lorem ipsum Door sit amet,是一位杰出的领导者。佩伦茨克
《爱神》中的权杖。Phasellus lacus massa,
laoreet cursus scelerisque id,posuere ac mauris。在hac habitasse
台词。埃涅阿斯·厄洛斯酒后驾车,终身健身,康瓦利斯
猫咪。但不在事前不在事后。
毛里斯·维尔尼布·达皮布斯酒店
佩伦茨克欧盟id多洛。这句话的意思是“你的名字是什么?”。
莫里斯·尼塞尔·利古拉(Mauris nisl-ligula),连续妊娠期,葡萄品种。
纳勒姆是一个赌注

这显然遗漏了文本,因为它只搜索没有任何标记的纯字符串

有人有任何方便的正则表达式可以匹配普通字符串以及包含html的字符串吗


这是为了在从搜索页面引用后在页面顶部创建一些锚,我想突出显示搜索词,因此需要包装整个字符串。

试试这个

$result = preg_replace_callback('%\b(Suspendisse potenti)(?!</\w+)\b%im', 'compute_replacement', $subject);

function compute_replacement($groups) {
    // You can vary the replacement text for each match on-the-fly
    // $groups[0] holds the regex match
    // $groups[n] holds the match for capturing group n
    return '<span>$1</span>';
}

$result=preg\u replace\u callback('%\b(Suspendisse-potenti)(?!在这种情况下,您希望做什么
Suspendisse
?在
Suspendisse
之前开始跨度,然后在
之间关闭跨度可能在输入文本上是不可能的,而不是
$text
,使用
带标签($text)
,请告诉我进展如何。
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque 
scelerisque neque in eros convallis egestas. Phasellus lacus massa, 
laoreet cursus scelerisque id, posuere ac mauris. In hac habitasse 
platea dictumst. Aenean eros dui, congue ut ultrices vitae, convallis
quis felis. Ut non ante non nunc tempus ultrices et et ipsum. 
Suspendisse <a href="/link">potenti In sed</a> mauris vel nibh dapibus 
pellentesque eu id dolor. Morbi dictum quam eleifend ante mattis rutrum. 
Mauris nisl ligula, consectetur eget gravida vel, varius vel metus. 
Nullam a ante metus.</p>
$result = preg_replace_callback('%\b(Suspendisse potenti)(?!</\w+)\b%im', 'compute_replacement', $subject);

function compute_replacement($groups) {
    // You can vary the replacement text for each match on-the-fly
    // $groups[0] holds the regex match
    // $groups[n] holds the match for capturing group n
    return '<span>$1</span>';
}