如何在字符串中的字符串周围加粗两个单词,但不重叠句子?

2023-12-09

我需要将搜索词及其上下文(在句子中)加粗。

考虑字符串:

Lorem ipsum dolor 坐 amet。连接脂肪精英。

如果搜索词是Lorem ipsum,那么结果应该是:

Lorem ipsum dolor 坐阿梅特。连接脂肪精英。

如果搜索是dolor sit,结果应该是:

Lorem ipsum dolor 坐 amet。连接脂肪精英。

如果搜索是Consectetuer,结果应该是:

Lorem ipsum dolor 坐 amet。连接脂肪精英。

你建议我如何执行此操作(在 php 中)?

将搜索词加粗很容易:

$string = str_replace($query,'<strong>' . $query . '</strong>', $string);

但是如何在前后包含两个单词而不与下一个或上一个句子重叠呢?


您可以将字符串拆分为“句子”(以句号拆分(感叹号、问号……怎么样))。

然后找到与该单词匹配的句子。

然后将该句子拆分为“单词”,并在匹配单词的前后两个单词中添加一些标签。由于您只有一个句子需要处理,因此您需要进行一项检查以确保您没有超出单词数组的范围。

然后将单词重新连接在一起,并将所有句子重新连接在一起。


或者,您可以使用正则表达式和preg_replace(尽管这可能不是您想要走的路,特别是如果您有一个选项,例如在纯文本上进行拆分 - 有一句话类似于“您遇到问题,并且您想使用正则表达式来解决它。现在您有了两个问题。”):

$string = preg_replace("/\\b(\\w+ +){0,2}$query( +\\w+){0,2}\\b/i",
                       '<strong>$0</strong>',
                       $string);

正则表达式的工作方式如下(上面转义了反斜杠):

\b        | match a word boundary (ie match whole words)
(\w+ +)   | match a "word" followed by spaces (to separate it from the next word)
{0,2}     | match 0 to 2 of these such words (it will match as many as possible
          | up to 2)
$query    | match the '$query' string
( +\w+)   | regex for space (separating $query) followed by a word
{0,2}     | match 0 to 2 of these words (as many as possible up to 2)
\b        | match a word boundary (ie match whole words)

The /i最后的意思是“不区分大小写”。

替换字符串,<strong>$0</strong>, 表示替换为“strong”标签包围的所有匹配单词。

这有效的原因是正则表达式不允许匹配句号。所以它会抢up to两边各2个字$query但禁止越过句号。

有一些常见的警告(无论您使用什么方法都会有这些警告)——您是否希望用粗体来表示问号?感叹号?单词中允许使用撇号吗?对于单词之间的非句号标点符号,您会采取什么措施? ETC。

我建议将上述正则表达式(如果您想使用正则表达式)细化为:

  • 允许在单词中使用撇号:change\w+ to [\w']+(也转义 PHP 反斜杠)
  • 允许使用各种标点符号between词语: 改变+类似的东西[\s\-&,]+(表示单词之间允许使用“空格”、“-”、“&”、“,”——根据您的喜好添加更多内容,但不要放入“.”,以防止粗体超过句号) 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在字符串中的字符串周围加粗两个单词,但不重叠句子? 的相关文章

  • 通过jquery传递搜索参数

    我有一个表单 如果用户输入搜索查询 其参数应通过 jquery 传递 并在获取结果后将结果加载到 div 容器中 由于我不太熟悉 jquery 我该怎么做 html currently the data is being displayed
  • 使用 PhpStorm 删除 CakePHP 中的插件后出现“成员有私人访问错误”

    从我的 CakePHP 框架中删除插件以及与其关联的所有代码行后 我在以下位置收到错误getInitializer的功能autoload static php in my vendor gt composer folder public s
  • 为什么当尝试使用 $this->data 访问 CakePHP 时,密码字段为空?

    我正在实现一个身份验证组件 这是我的注册页面 create User array action gt login echo form gt input primary email array size gt 32 echo form gt
  • java的split string方法也可以返回带分隔符的数组

    当我们使用String Split java中对字符串进行分割的方法 其工作原理如下 String s hello my dear String ss s split 数组ss包含 Hello my dear 但在这种情况下 空格 即分隔符
  • 使用 PHP/COM/ADSI/LDAP 更改 AD 密码

    我已经被这个问题困扰了好几天了 我尝试了各种解决方案均无济于事 请帮忙 Problem 我们有两个域控制器 它们不属于我们的管理范围 我们能够通过端口 389 上的 LDAP 进行连接 但无法通过端口 636 安全连接 我们正在开发一个系统
  • 如何验证使用 php 上传的文件不包含可执行二进制文件?

    使用简单的 Firefox 插件 黑客可以更改他们想要上传的任何文件的 MIME 类型 绕过文件类型检查器 然后 黑客可以使用 GIMP 等程序将 php 脚本嵌入到图像 音频或任何其他文件的二进制数据中 我该如何检查并防止这种情况发生 您
  • 基本表创建 fpdf

    我找不到使用 fpdf 制作表格并从 mysql 数据库获取数据的合适教程 我只是想知道如何创建一个 我在网上尝试示例时遇到了很多错误 例如 我有 名字 中间名 姓氏 年龄 和 电子邮件 列 如何使用 fpdf 创建表格并回显数据库中的条目
  • 访问 public_html 级别之外/以下的文件

    如何通过 url 访问文件 home uzair etc index php 即使我运行域 something com 它显示了 home uzair public html index php 这个文件 任何人请帮助我如何访问放置在 ho
  • 将 PHP mcrypt 与 Rijndael/AES 结合使用

    我正在尝试使用 php 中的 mcrypt 和密码 Rijndael 加密一些文本消息 但我不确定 MCRYPT MODE modename 根据 PHP 手册 这些可用 ecb cbc cfb ofb nofb 或 stream 但我读到
  • TCPDF/PHP 和字体:大写数字(血统数字?旧样式?)

    我得到了一种特殊的字体 上面有这样的数字 例如 正如您在 3 上看到的 一些数字下降到基线以下 我想要实现的是 这些数字不会低于该线 并且看起来像这样 在 Word 中 可以在相同字体的字符设置中轻松设置 如何在 TCPDF 中呈现数字 我
  • PHP/MySQL:如何在网站中创建评论部分[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我不会问 如何使用 PHP MySQ
  • 有什么方法可以在不重新加载的情况下更改标头 URL? [复制]

    这个问题在这里已经有答案了 可能的重复 修改URL而不重新加载页面 https stackoverflow com questions 824349 modify the url without reloading the page 使用新
  • 如何从控制器访问 Zend Framework 应用程序的配置?

    我有一个基于 Zend 框架的应用程序快速开始 http framework zend com docs quickstart setup 我已经让演示工作起来 现在正在实例化一个新的模型类来完成一些实际工作 在我的控制器中 我想将配置参数
  • 如何在 PHP 数组中的另一个已知(通过键或指针)元素之后有效地插入元素?

    给定一个数组 a array abc 123 k1 gt v1 k2 gt v2 78 tt k3 gt v3 当其内部指针指向其元素之一时 如何在当前元素之后插入元素 如何在键已知元素 例如 k1 之后插入元素 表现护理 您可以通过使用拆
  • SQL Server 转换选择一列并将其转换为字符串

    是否可以编写一条从表中选择列并将结果转换为字符串的语句 理想情况下 我希望有逗号分隔的值 例如 假设 SELECT 语句看起来像这样 SELECT column FROM table WHERE column lt 10 结果是一列包含值的
  • 如何将参数传递给 Symfony2 中的验证约束 - 在 yml 中

    我正在尝试向我的应用程序添加一个包范围的参数 以便我可以将其添加到我的验证约束文件 validation yml 中 myApp myBundle Entity Contact properties name NotBlank messag
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • PHP 文件服务脚本:下载不可靠?

    这篇文章最初是关于 ServerFault 的一个问题 https serverfault com questions 131156 user receiving partial downloads https serverfault co
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE
  • PHP简单的html dom解析器与wordpress冲突吗?

    PHP简单的html dom解析器与wordpress冲突吗 因为每当我尝试将其与此代码一起包含在我的标头中时 一切都变成空白 感谢您提前提供任何帮助 当我尝试在 HTML 文档中使用 PHP 包含时 我遇到了同样的问题 但当我使用func

随机推荐

  • 绘制数据前后没有间隙的时间数据

    我有来自监控的CPU利用率数据 监控不会在每分钟的第一秒开始 但 Gnuplot 在这一分钟开始时开始 X 轴的值 缺失的秒数充满了间隙 数据图之前和之后 它是否能够用我的数据无间隙地启动 X 轴 我不能使用 set xrange 13 1
  • 触发器在 Jenkinsfile 中远程构建(例如,从脚本)语法

    我在自由式作业中使用此选项 但现在我的团队正在制定标准格式 因此我必须在管道脚本中编写所有自由式作业 并且我进行了很多谷歌搜索 但不知道如何在管道脚本 您可以使用以下命令触发远程 Jenkins 作业triggerRemoteJob管道步骤
  • Pygame 音乐暂停/取消暂停切换

    好的 这是我的代码 def toggleMusic if pygame mixer music get busy pygame mixer music pause else pygame mixer music unpause 事件处理 如
  • ASP.NET - 在全局资源文件中存储 SQL 查询?

    将 SQL 查询存储在全局资源文件中而不是放在代码隐藏中是个好主意吗 我知道存储过程将是一个更好的解决方案 但我在这个项目上没有那么奢侈 我不想在我的页面上到处查询 并认为中央存储库会是一个更好的主意 资源文件通常用于本地化 但是字符串只是
  • 配置 VSCode 执行不同的任务

    我在 Visual Studio Code 中有一个 TypeScript 项目 其任务如下 version 0 1 0 The command is tsc command tsc Show the output window only
  • RESTful Web 服务返回 XML 而不是 JSON

    我有一个简单的网络服务 现在它只是查看零件号是否为 A123456789 然后返回型号 这将被连接到数据库以检查零件号然后返回实际型号的逻辑所取代 但此时我只需要它返回一些虚拟 JSON 数据 但是 当我使用 Fiddler 并查看网络浏览
  • 如何在 Docker Compose 中设置 uid 和 gid?

    我可以执行一个docker run命令如此 docker run rm user id u id g e MYDATA some path to data e USER USER p 8883 8887 8883 8887 然而 在 Doc
  • 实体框架 6.1 和使用 New 关键字的成员隐藏

    我有一堆实现称为接口的实体ICreatableEntity 定义是 public interface ICreatableEntity int CreatedById get set Employee CreatedBy get set D
  • 使用 Matplotlib 绘制麦克斯韦颜色三角形

    我想创建一个麦克斯韦颜色三角形 https homepages abdn ac uk npmuseum article Maxwell Legacy MaxTri html 使用 Matplotlib 我找到了类似的代码 http www
  • 在 emacs 中通过 M-x 机制运行 scutils 时出错

    我已经安装了scmutils 对于这本书SICM 从下面的焦油球 usr local 然后我把它放在我的 emacs defun mechanics interactive run scheme usr local scmutils mit
  • 传单不连贯地绘制瓷砖

    我正在实例化一个传单地图 但图块基本上分散在整个页面上 虽然地图位于 div 内 但大多数图块不尊重该边界 div class widget content listing search map widget content div cla
  • rpmbuild 的自定义 gradle 任务

    我们目前正在从 scons 转向 gradle 来构建我们软件的 java 部分 我们需要的一件事是从规范文件构建 rpm 因此 我们尝试编写自定义任务来执行 rpmbuild 以从规范文件构建 rpm 代码归结为 def rpmPath
  • React Router DOM 中多个 URL 的 NavLink 在同一链接上处于活动状态

    我有一个包含多个选项卡 子 的页面 我还更改了每个选项卡的 URL 但我仍在父页面上 只是更改了选项卡的 URL 问题是 当我单击选项卡时 我无法使父页面 NavLink 保持活动状态 因为它更改了 URL 但我想在选项卡 URL 上保持该
  • Objective C 将联系人添加到 iPhone 中的特定组

    我正在制作一个在地址簿中存储联系人的应用程序 我正在使用 Xcode 4 2 我知道如何在地址簿中添加联系人 假设我在联系人列表中有一个名为 A 的组 我想将此联系人添加到该组中 该怎么做 这是我正在使用的代码 ABAddressBookR
  • 在 MATLAB 中调整图像大小

    我正在尝试创建一个函数 根据家庭作业的值 scale zoom 缩放图像 我不想使用 MATLAB 内置函数resize 在此函数中 所以我尝试进行插值 任何帮助将不胜感激 这是我到目前为止所拥有的 function pic new sca
  • TCL 脚本:变量作为函数的参数

    我正在尝试使用 Amira 进行一些简单的脚本编写 它使用 TCL 但我不能保证它是标准版本 我想从一个对象读取属性并将其分配给另一个对象 在命令窗口中 过程如下 Image1 获取变换 0 1 0 2 0 3 0 0 0 0 0 0 1
  • liquibase 使用 Maven 和两个数据库

    我有以下结构来从 Maven 运行一个数据库
  • PHP 互斥(mutex)

    阅读一些有关 PHP 中锁定的文本 它们主要都是针对http php net manual en function flock php 本页讨论在硬盘上打开文件 真的是这样吗 我的意思是 这使得锁定非常昂贵 这意味着每次我想要锁定时我都必须
  • android 通过显式 TLS 进行 ftp 文件传输

    我在一遍又一遍地尝试让它工作但没有成功后发布这个问题 我尝试使用 apache commons 库在 android 中实现 FTP 文件传输 通信必须通过显式 TLS 身份验证完成 我可以成功登录 连接到服务器并列出文件 但每当我尝试获取
  • 如何在字符串中的字符串周围加粗两个单词,但不重叠句子?

    我需要将搜索词及其上下文 在句子中 加粗 考虑字符串 Lorem ipsum dolor 坐 amet 连接脂肪精英 如果搜索词是Lorem ipsum 那么结果应该是 Lorem ipsum dolor 坐阿梅特 连接脂肪精英 如果搜索是