ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-12-01 07:33:12  阅读:182  来源: 互联网

标签:preg-replace html-parsing html php regex


任何人都可以提出以下解决方案.

例如,我有一串文字“ 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. 
<span class="search-match" id="search-term-0">Suspendisse potenti</span>. 
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>

我正在使用以下方法工作:$text = preg_replace_callback(‘/(‘.preg_quote($searchTerm,’/’).’*)/’,“ Search :: addSearchId”,$text);

我的问题是,当我正在搜索的文本中的字符串的一部分位于html标记中时.

<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</a>. 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>

很显然,这会丢失文本,因为它只搜索没有任何标签的纯字符串.

有人有任何方便的正则表达式可以匹配纯字符串以及带有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>';
}

标签:preg-replace,html-parsing,html,php,regex
来源: https://codeday.me/bug/20191201/2079084.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有