ICode9

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

PHP正则表达式挑战

2019-06-06 20:21:20  阅读:175  来源: 互联网

标签:php regex


我对正则表达式的体验不仅仅是介绍,所以这是一个挑战.也许一些数学/物理/有人可以搞清楚……

我们必须用< span class =“tooltip”>< / span>来包装某些单词/短语这样就可以显示跨度内容的相关工具提示.挑战在于如果它是已经包装的另一个短语的一部分,如何避免不包装两次单词.

示例:“使用Twitter Analyzer进行分析”.

Twitter和Twitter Analyzer都有工具提示,但只有Twitter Analyzer需要包含在上面.这是通过确保我们首先搜索最长的短语来实现的.

如果它已经包裹在另一个跨度中,你如何阻止(仅使用正则表达式)两个短短语再次被包裹?

此外,Twitter和Twitter Analytics只是整个列表的两个示例,因此它必须是通用的.

有任何想法吗?

解决方法:

我认为你最好的选择是匹配你正在寻找的单个短语,并且对于每次击中,保存比赛开始时的字符串偏移量.构建偏移列表后,将偏移从最低到最高排序.对于列表中的每个偏移量,通过添加字符串长度来计算字符串的结束偏移量.如果列表中的任何后续项目的偏移量小于此新偏移量,请将其删除.如果列表中的两个偏移量相同,则取两个字符串中较长的一个并将另一个字符串抛出.

在您给出的示例中,“Twitter Analyzer”的偏移量为4,“Twitter”的偏移量为4.为了演示,假设您还对“Analyzer”感兴趣,其偏移量为12.排序列表为:

offset 4 - Twitter Analyzer - length 16
offset 4 - Twitter          - length 7
offset 12 - Analyzer        - length 8

因为有两个4,所以抛出一个长度较短的一个.然后将“twitter analyzer”的长度添加到其偏移量中以获得20.任何小于20但大于4的偏移都会被抛出.

要插入字符串,请保留开始和结束偏移列表,并从列表末尾开始.在结束偏移处插入“< / span>”并且在开始偏移处插入“< span class =”tooltip>“在字符串中向后移动直到到达前面.这将允许您进行替换而无需重新计算偏移.

标签:php,regex
来源: https://codeday.me/bug/20190606/1189435.html

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

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

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

ICode9版权所有