仅在单个正则表达式中多次匹配一组

2024-04-13

嗨我的问题很简单:

我只想匹配文章中所有可能的主题标签,前提是它们位于<figcaption>使用 PCRE 正则表达式。例如:

<figcaption>blah blah #hashtag1, #hashtag2</figcaption>

我在这里做了尝试https://regex101.com/r/aL9vS8/1 https://regex101.com/r/aL9vS8/1并删除最后一个?会改变捕获#hashtag1 to #hashtag2但不能两者兼得。

我什至不确定它是否可行PHP 中的一个正则表达式.

有什么想法可以帮助我吗? :)

如果单个正则表达式没有办法(真的吗?即使使用递归(?R)?? :p),请建议性能方面最有效的方法。

谢谢你!

[EDIT]

如果没有办法,我的 PHP 下一个想法是:

  1. 将每个 Figcaption 与preg_replace_callback
  2. 在回调中匹配每个实例#hashtag.

我可以听听您对此的看法吗?有没有更好的办法?我的文章不是很长。


请建议性能方面最有效的方法

使用 PCRE 正则表达式匹配某些分隔符之间的某些文本的最可靠方法是使用自定义边界\G操作员 http://perldoc.perl.org/perlretut.html#Global-matching。但是,尾随边界是多字符字符串,并且匹配除</figcaption>你需要一个脾气暴躁的贪婪令牌 https://stackoverflow.com/a/37343088/3832970。由于此令牌非常消耗资源,因此必须将其展开。

这是适合您任务的快速、可靠的 PCRE 正则表达式:

(?:<figcaption|(?!^)\G)[^<#]*(?:(?:<(?!\/figcaption>)|#\B)[^<#]*)*\K#\w+

See the 正则表达式演示 https://regex101.com/r/aL9vS8/3

Details:

  • (?:<figcaption|(?!^)\G)- 火柴<figcaption或上一次成功匹配的结束
    更多细节:
    (?:<figcaption|(?!^)\G) is a 非捕获组 ((?:...))这意味着仅进行分组,而不是跟踪与该组匹配的内容(即,由于未创建堆栈,因此组堆栈中没有保留任何值)匹配 2 个替代项(|是交替运算符):1)文字文本<figcaption or 2) (?!^)\G- 上一次成功匹配之后的位置(请注意\G也匹配字符串的开头,因此,我们必须添加负向前瞻(?!^)排除该行为)。
  • [^<#]*- 0+ 个字符以外的字符< and #
  • (?:(?:<(?!\/figcaption>)|#\B)[^<#]*)* - 0+ sequences of:
    • (?:<(?!\/figcaption>)|#\B) - a <没有跟随/figcaption> or #后面没有单词 char
    • [^<#]*- 0+ 个字符以外的字符< and #
  • \K- 省略目前匹配的文本
  • #\w+ - #和 1+ 个单词字符

更多细节:

  • \K http://www.pcre.org/pcre.txt:

转义序列\K导致任何先前匹配的字符不包含在最终匹配的序列中。例如,该模式:

foo\Kbar

火柴foobar,但报告它已匹配bar。此功能类似于后向断言。

  • (?:(?:<(?!\/figcaption>)|#\B)[^<#]*)*:这里,我们有一个外部非捕获组(?:...)*允许匹配子模式序列零次或多次(我们可以设置一个量词*如果我们需要重复一个分组,则只对一个分组sequence子模式)和内部非捕获组(?:<(?!\/figcaption>)|#\B)[^<#]*只是一种缩小更长的方法<(?!\/figcaption>)[^<#]*|#\B[^<#]*(只是为了将 2 个不同的替代方案分组<(?!\/figcaption>) and #\B在常见的“后缀”之前[^<#]*.
  • 包裹在标签中:只需使用preg_replace<span class="highlight">$0</span>替换模式:

Code:

$re = '~(?:<figcaption|(?!^)\G)[^<#]*(?:(?:<(?!\/figcaption>)|#\B)[^<#]*)*\K#\w+~'; 
$str = "<figcaption>blah # blah #hashtag1, #hashtag2</figcaption> #ee <figcaption>#ddddd"; 
$subst = "<span class=\"highlight\">$0</span>"; 
$result = preg_replace($re, $subst, $str);
echo $result;

See the PHP IDEONE 演示 https://ideone.com/fO2F7P

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅在单个正则表达式中多次匹配一组 的相关文章

  • Laravel 5.1 中的VerifyCsrfToken.php 第 53 行:(Firefox 浏览器)中出现 TokenMismatchException?

    我试图找出为什么会出现这个错误 即使它是全新安装的 我在我的项目中遇到了这个错误 所以我用谷歌搜索 没有一个答案对我有用 所以我创建了新项目并复制了所有控制器 视图和模型 几个小时后工作正常 再次出现令牌不匹配错误 为什么在 laravel
  • 在会话 cookie 中存储大量数据会产生什么影响?

    谁能解释一下在会话中存储大量数据的缺点或给我指出一些阅读材料 我也很感兴趣在会话中存储数据和从数据文件读取数据之间是否有任何区别 如果您在会话中存储大量数据 则输入 输出性能会下降 因为会有大量读取 写入 默认情况下 PHP 中的会话存储在
  • PHP解析xml文件错误

    我正在尝试使用 simpleXML 来获取数据http rates fxcm com RatesXML http rates fxcm com RatesXML Using simplexml load file 我有时会遇到错误 因为这个
  • 重复使用相同的卷曲手柄。性能大幅提升?

    在 PHP 脚本中 我对不同的 URL 执行了许多不同的curl GET 请求 一百个 将重复使用来自curl init提高性能 还是与请求的响应时间相比可以忽略不计 我这么问是因为在当前的架构中保持相同的句柄并不容易 交叉发布自我应该关闭
  • session_regenerate_id 没有创建新的会话 id

    我有一个脚本 旨在完成当前会话并开始新的会话 我使用了一段代码 它在我的开发计算机上运行良好 但是 当我将其发布到生产服务器时 会话 ID 始终保持不变 以下是我重新启动会话的代码 session start SESSION array P
  • 使用 php 更改白天和黑夜的背景?

    我正在制作一个 tumblr 页面 我的 html 页面有两种不同的背景 我希望白天背景从早上 7 点到晚上 8 点显示 夜间背景从晚上 8 点到早上 7 点显示 我决定用 php 来做这件事 但对于 php 来说我是个新手 我的朋友给我发
  • 如何从导出的 csv 文件中删除双引号

    我正在使用 Laravel 5 8 并且添加了 Maatwebsite 包 用于从数据库表导出 CSV 文件 这是我导出的类 class ConfirmedExport implements FromCollection WithHeadi
  • Grep 和 Python

    我需要一种通过 Unix 命令行中的正则表达式使用 grep 搜索文件的方法 例如 当我在命令行中输入 python pythonfile py RE file to be searched 我需要正则表达式 RE 在文件中搜索并打印出匹配
  • 使用 posix shell 测试字符串中的正则表达式

    如何测试字符串是否与特定字符串匹配正则表达式与基本 无 bash 或任何其他 posix shell 脚本 在 if 语句中 您可以使用expr在 POSIX shell 中计算正则表达式的命令 s Abc expr s alpha 3 e
  • git 匹配多个单词的标签

    我们可以得到最后一个 git 标签 它以一个单词 例如 TEST 开头 如下所示 git describe tag dirty match TEST 我想知道如何获得最后一个以 word1 开头的标签orword2 例如测试OR跑步 我尝试
  • 使用日语“Enter”键进行搜索功能

    我在日语方面遇到了问题 我有一个允许用户搜索数据的表单 当用户输入要搜索的字符串并按 Enter 键时 搜索功能就会执行 我的代码是 formSearch input keyup function event var key event c
  • PHP 中的 NOW() 函数

    是否有 PHP 函数以与 MySQL 函数相同的格式返回日期和时间NOW 我知道如何使用date 但我想问是否有专门用于此的功能 例如 返回 2009 12 01 00 00 00 您可以使用date https www php net m
  • Android GCM 服务器的 API 密钥

    我有点困惑我应该为 GCM 服务器使用哪个 API 密钥 在文档中它说使用 android api 密钥 这对我不起作用并且总是给出未经授权的 http developer android com google gcm gs html ht
  • 未捕获的异常“Google_IO_Exception”,消息为“HTTP 错误:无法连接”

    我有一个任务 查询 运行一些从 gmail 邮箱检索数据的 php 代码 直到上周五 2015 年 4 月 10 日 它一直工作正常 现在我收到以下错误日志 E 11 58 26 094 2015 04 15 200 3 38 KB 14
  • 在 Woocommerce 购物车中设置最小小计金额

    我正在尝试将最低订单金额设置为 25 美元 到目前为止 我找到了这段代码 如果未达到最低限度 它似乎可以阻止结账 但它使用的小计包含税费 我需要在总计中排除税费 add action woocommerce checkout process
  • PHP中如何识别服务器IP地址

    PHP中如何识别服务器IP地址 对于服务器 ip 来说是这样的 SERVER SERVER ADDR 这是港口的 SERVER SERVER PORT
  • Perl:HTTP::微小删除留下损坏的锚标记

    我编写了一个脚本 该脚本收集从数据库读取的缓冲区内的所有 URL 检查该页面是否仍然存在 并使用 HTTP Tiny 从缓冲区中删除 URL 如果该 URL 无法访问或返回无效 问题是 HTTP Tiny 删除左锚标记 例如此处无效的文本
  • php 表单提交 - Q2

    我对这个虚拟问题感到抱歉 这是我的简单 PHP 表单 其中包含两个 SQL 表和 ADD 提交 按钮 我希望将人员从 Test1 转移到 Test2 很多事情都很好 只有提交按钮不起作用 因此 Test2 表没有反馈 Revised 现在提
  • php下拉菜单人口

    我正在尝试编写一个 php 脚本 该脚本将根据主下拉菜单的选择填充第二个下拉菜单 我想使用 jquery 来完成所有非页面刷新的事情 但我发现现有的所有东西都很难理解和修改 你知道有什么写得很好且易于理解的东西吗 或者可能是现有的教程 下面
  • PHP 和 NLP:嵌套括号(解析器输出)到数组?

    想要将带有嵌套括号的文本转换为嵌套数组 以下是 NLP 解析器的输出示例 TOP S NP PRP I VP VBP love NP NP DT a JJ big NN bed PP IN of NP NNS roses 原文 我喜欢一大床

随机推荐

  • 为什么我的 Firebase 推送通知单个项目的打开率总是显示零计数?

    从上图可以看出 所有推送通知始终显示零打开率 尽管我非常确定至少有 1 会打开推送通知 我想跟踪一天内每条发送消息的打开率 但如果从 Firebase 控制台打开基于当天的总体报告 它将跟踪一天内发送的所有消息的打开率 如下图所示 那么为什
  • FTP 错误 530 用户无法登录

    我正在尝试通过 FTP 访问我使用 Windows Server Web 64 位 版本的 IIS 7 0 设置的新 FTP 站点 但是当我尝试登录该网站时出现上述错误 但我可以登录到我的其他 FTP 站点 另外 当我从 IIS 管理器中选
  • 在 Core Graphics 中创建一个具有多色段的圆

    我正在尝试绘制一个饼图 该饼图由大小相等的部分组成 每个部分具有不同的颜色 我的代码基于此SO 在SWIFT中画一个圆弧段进度 https stackoverflow com questions 31807846 draw a circul
  • Indy10 + OpenSSL:发送电子邮件代码在 Windows 8 上停止工作

    代码在 Windows 8 上停止运行 它在 Windows7 Windows XP 上运行良好 我找到了解决此问题的方法 以 Windows 兼容模式启动应用程序 Windows XP Service Pack 3 代码工作 如果 Win
  • 使用 KL 散度时,变分自动编码器为每个输入 mnist 图像提供相同的输出图像

    当不使用 KL 散度项时 VAE 几乎完美地重建 mnist 图像 但在提供随机噪声时无法正确生成新图像 当使用 KL 散度项时 VAE 在重建和生成图像时都会给出相同的奇怪输出 这是损失函数的 pytorch 代码 def loss fu
  • 有没有好的 x86 双精度小矩阵 SIMD 库?

    我正在寻找一个专注于图形小型 4x4 矩阵运算的 SIMD 库 那里有很多单精度 但我需要支持单精度和双精度 我看过 Intel 的 IPP MX 库 但我更喜欢带有源代码的库 我对这些特定操作的 SSE3 实现非常感兴趣 垫4 垫4 Ma
  • “纯”MVVM 中的 MenuItem 键盘快捷键?

    我在 wpf 中使用的所有菜单 上下文菜单 工具栏都在 ViewModel 代码中声明 非常像这样 MenuService Add new MenuItem Header DoStuff Command new relayCommand D
  • 如何检查Android中的颜色亮度?

    如何在android中检查亮度 我有一个整数值的颜色 我想根据颜色的整数值检查该颜色是深色还是浅色 if checkColor Color RED checkColor Color BLACK set fore color is white
  • 如何将js对象转换为点表示法字符串

    我有一个像这样的 JavaScript 普通对象 a b 1 我想将其转换为点符号字符串 如下所示a b 1 用例 将对象发送到纯文本环境 例如 cli 或作为 url 参数 很难判断这是否是您想要的 但是这样的东西会将对象树扁平化为点路径
  • UISegmentedControl 不更新视图

    我正在 Xcode 5 中构建一个应用程序 并且遇到了一些奇怪的行为UISegmentedControl 首先是我正在构建的应用程序的一些信息 我正在构建一个应用程序 我希望允许用户在注册公司订购产品 作为一项额外服务 我希望允许他们查看他
  • Xcode 6.1 中的 segue 操作列表中没有“显示”

    我是 swift 和 IOS 开发的新手 系统信息 Xcode 6 1 发行说明 操作系统 X 10 10 1 我的应用程序有两个视图控制器 ViewA 和 ViewB 无导航控制器 我想通过单击 ViewA 中的 UIButton 从 V
  • NSDictionary 对比NSArray

    我正在阅读 Objective C 一本书呆子牧场的书 我不禁思考这个问题 我如何决定使用哪种集合类型 NSArray 或 NSDictionary 都带有或不带有可变子类 从 URL 读取内容时 假设我正在从 PHP 脚本读取 JSON
  • 如何在 Safari Web Inspector 中应用样式规则?

    Chrome 开发者工具允许您在 样式 窗格中应用样式规则 我还没有找到在 Safari 样式规则 窗格 中执行此操作的方法 有人知道是否可能吗 另外 Safari 是否有像 Chrome 那样的标尺 OS X 上的 Safari 8 0
  • Lucene索引:查询时得到空结果

    我正在尝试使用 Lucene 索引进行查询 但在日志中得到空结果和以下错误 Traversal query query without index select jcr path from nt base where isdescendan
  • Django:INSTALLED_APPS 是“.apps.AppConfig”多余的吗?

    我没有看到这个问题的答案版本 这确实让我很困扰 因为我已经看到两者都被使用了 在此示例中 myapp 是创建的应用程序 我不断看到用户在 INSTALLED APPS 列表中设置他们的应用程序 如下所示 INSTALLED APPS mya
  • “保留 Xcode 版本”与“在磁盘上使用版本”之间的区别?

    当我使用 git 时 我通常会在分支和我的分支之间切换iOSBaseSDK xcworkspace文件被修改 发生这种情况时 我的 Xcode 会显示以下警报 文件 YourProject xcworkspace 已被另一个应用程序修改 该
  • jquery通过css过滤元素

    例如 我想选择每个具有红色背景颜色的 div 这在 jquery 中可能吗 div style background color red div div style background color white div div style
  • 让 UILabel 发光并看起来明亮的最佳方法是什么?

    我制作了 UILabel 显示当前时间 我希望时间 UILabel 在屏幕上发光 我尝试了通过谷歌找到的许多答案 但没有人正常工作 需要这样 https i stack imgur com 4REJp png https i stack i
  • 自动映射器 UseDestinationValue

    映射时遇到问题 VPerson vPerson new VPerson Id 2 Lastname Hansen1 Name Morten1 DPerson dPerson new DPerson Id 1 Lastname Hansen
  • 仅在单个正则表达式中多次匹配一组

    嗨我的问题很简单 我只想匹配文章中所有可能的主题标签 前提是它们位于