PHP 正则表达式挑战

标签 php regex

我对 Regex 的体验不仅仅是介绍,所以这是一个挑战。也许一些数学/物理/某人可以弄清楚...

我们必须用 <span class="tooltip"></span> 包裹某些单词/短语以便为跨度的内容显示相关的工具提示。挑战在于,如果一个词是另一个已经换行的短语的一部分,如何避免不换行两次。

示例:“使用 Twitter 分析器进行分析”。

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

如果两个短语中较短的短语已经被包装在另一个跨度中,您如何防止(仅使用正则表达式)再次包装?

此外,Twitter 和 Twitter Analytics 只是整个列表的两个示例,因此它需要是通用的。

有什么想法吗?

最佳答案

我认为最好的办法是匹配您要查找的各个短语,并为每次匹配保存匹配开头的字符串偏移量。建立偏移量列表后,将偏移量从最低到最高排序。对于列表中的每个偏移量,通过添加字符串长度来计算字符串的结束偏移量。如果列表中任何后面的项目的偏移量小于此新偏移量,则将其删除。如果列表中的两个偏移量相同,则取两个字符串中较长的一个并丢弃另一个。

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

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

因为有两个 4,扔掉长度较短的一个。然后将“twitter analyzer”的长度与其偏移量相加得到 20。任何小于 20 但大于 4 的偏移量都会被丢弃。

要插入字符串,请保留您的开始和结束偏移量列表并从列表末尾开始。在结束偏移处插入一个“”,在开始偏移处插入“

关于PHP 正则表达式挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4147673/

相关文章:

php - fatal error : Call to a member function fetch() on boolean by reading records from database

php - 将 MYSQL 字符串插入图像源以进行显示

java - 使用正则表达式在字符串中查找子字符串

c# - 占位符和正则表达式

javascript - 在正则表达式或 2 组之间的运算符不起作用

php - 如何检查产品是否在比较列表 magento 中

php - 创建一个jquery函数,根据比较将分数添加到MySQL表中的total-points列中

php - 如何确保脚本在执行前完全执行?

regex - 使用正则表达式模式验证 bash 中的用户输入时间

c# - 移除 HTML 中的 Style 标签