PCRE PHP “S”(模式的额外分析)修饰符的用法和实用性的具体示例?

2024-05-06

PHP 手册对 PCRE 的“S”(模式的额外分析)修饰符进行了以下说明http://php.net/manual/en/reference.pcre.pattern.modifiers.php http://php.net/manual/en/reference.pcre.pattern.modifiers.php

S

当一个模式要使用多次时,值得 花更多的时间分析它以加快时间 用于匹配。如果设置了这个修饰符,那么这个额外的分析是 执行。目前,研究模式仅适用于 没有单一固定起始点的非锚定模式 特点。

因此它的用法与应该多次使用且内部没有锚点的模式相关(例如^, $) 或固定的起始字符序列,例如像这样的模式'/^abc/'.

但没有任何具体细节,例如应用此修改器及其实际工作原理。

它是否仅适用于当前执行脚本的 PHP 线程,并且在执行脚本后,模式的“缓存”分析会丢失吗?或者引擎是否将模式分析存储在全局缓存中,然后将其提供给使用 PCRE 以及标有此修饰符的模式的多个 PHP 线程?

另外,来自PCRE的介绍:http://php.net/manual/en/intro.pcre.php http://php.net/manual/en/intro.pcre.php

注意:此扩展维护已编译的全局每线程缓存 正则表达式(最多 4096)

如果“S”修饰符仅在每个线程中使用,它与已编译正则表达式的 PCRE 缓存有何不同?我猜想存储了附加信息,就像 MySQL 在索引表中的行时所做的那样(当然,在 PCRE 的情况下,这些附加信息存储在内存中)。

最后但并非最不重要的一点是,有人经历过他/她使用此修改器的真实用例吗?您是否注意到了改进并欣赏它的好处?

感谢您的关注。


PHP 文档引用了 PCRE 文档的一小部分。以下是更多详细信息(重点是我的)PCRE 8.36:

如果要多次使用编译的模式,则值得花费更多时间对其进行分析,以加快匹配所需的时间。功能pcre_study()将指向已编译模式的指针作为其第一个参数。如果研究模式产生有助于加快匹配速度的附加信息,pcre_study()返回一个指向 a 的指针pcre_extra块,其中study_data字段指向研究结果。

...

研究模式有两件事:首先,计算匹配模式所需的主题字符串长度的下限。这并不意味着有任何该长度的字符串匹配,但它确实保证没有更短的字符串匹配。该值用于避免尝试匹配比下限短的字符串而浪费时间。您可以通过以下方式找到调用程序中的值pcre_fullinfo()功能。

研究模式对于没有单个固定起始字符的非锚定模式也很有用。创建可能的起始字节的位图。这可以加快在主题中找到开始匹配的位置的速度。(在 16 位模式下,位图用于小于 256 的 16 位值。在 32 位模式下,位图用于小于 256 的 32 位值。)

请注意,在后来的 PCRE 版本(v10.00,也称为 PCRE2)中,该库经历了大规模的重构和 API 重新设计。后果之一就是学习always在 PCRE 10.00 及更高版本中执行。我不知道 PHP 何时会使用 PCRE2,但这迟早会发生,因为从现在开始 PCRE 8.x 将不会获得任何新功能。

这是来自PCRE2发布公告 https://lists.exim.org/lurker/message/20150105.162835.0666407a.en.html:

对编译模式的显式“研究”已被废除 - 现在总是如此 自动发生。 JIT编译是通过调用一个新函数来完成的,pcre2_jit_compile()成功返回后pcre2_compile().


至于你的第二个问题:

如果“S”修饰符仅在每个线程中使用,它与已编译正则表达式的 PCRE 缓存有何不同?

PCRE 本身没有缓存,但 PHP 维护了正则表达式的缓存,以避免一遍又一遍地重新编译相同的模式,例如,如果您使用preg_循环内的函数。

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

PCRE PHP “S”(模式的额外分析)修饰符的用法和实用性的具体示例? 的相关文章

  • 发送变量后的 wsdl 服务响应,php

    我是 SOAP WSDL 函数的新手 我有一位客户从一家从事汽车测试的公司获得了 wsdl 文件 我的客户是他们的分包商 他们告诉我们上传有关车牌 类别等信息 一旦详细信息发送完毕 服务器就会做出成功或失败的响应 请您协助 浏览不同的信息
  • xdebug.remote_handler 在 PHP.INI 中设置,但未在 PHPinfo 中显示

    我正在尝试让 Xbdebug 与 NetBeans 一起运行 以便调试一些 PHP 代码 我确信几年前我已经让它工作了 然后切换了 IDE 现在想切换回来 When I try to debug the status bar shows 并
  • 在laravel中组合两个不同的无关系数据库表查询进行分页

    我的数据库中有两个不相关的表 我需要将它们合并 以便我可以将其放在我的搜索视图中 但我不知道是否可能 这是我的代码 这news and season表不相关 但它们具有相似的列 我试图将其放入一个对象中以便于分页 是否可以 search r
  • 解析错误:语法错误,意外的 T_RETURN [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 遇到这个问
  • 无法在jspdf中加载多个图像

    我正在尝试加载动态生成的多个图像 我想将这些图像转换为 PDF 格式 HTML 代码如下
  • 这个巨大的正则表达式是如何工作的?

    我最近在我的一个目录中的一个名为的文件中找到了下面的代码doc php 文件功能或链接到文件管理器 做得非常好 基本上 它列出了当前目录中的所有文件 并且允许您更改目录 它可以访问我的所有文件 添加 重命名 信息 删除 我不记得安装过它 我
  • 在 Laravel 中的编辑表单上获取选定选项

    我的网站订单有一个可编辑的表单 并且有以下字段 User quantity note status 我在此表单中还有其他选项 但只有这些字段对我来说很重要 以便能够获取默认值 例如 我希望能够查看用户默认订购的数量 然后我可以更改它或保留它
  • 检查字符串是否是哈希值

    我正在使用 SHA 512 来散列我的密码 当然还有盐 我认为我想要的不可能 但无论如何我们还是要问一下 有没有办法检查字符串是否已经是 SHA 512 或其他算法 哈希值 当用户登录时 我想检查他的密码 如果它仍然是纯文本 则应将其转换为
  • yii2 中的自动完成

    在 Yii2 中 我希望当用户开始输入时 我的输入字段之一能够自动完成 下面是我的代码 它使用Jui Autocomplete 这是行不通的 当我打印我的数组时 我就像 Array 1 gt abc 2 gt xyz 4 gt pqr
  • 匹配所有有效格式 IPv6 地址的正则表达式

    乍一看 我承认这个问题看起来像是这个问题以及与之相关的任何其他问题的重复 匹配有效 IPv6 地址的正则表达式 https stackoverflow com questions 53497 regular expression that
  • 如何使用 jQuery Ajax 将 PHP 数组值传递到另一个文件?

    这是我的代码
  • 如何在同一 PHP 页面上多次使用 mysqli fetch_assoc() 和准备好的语句?

    有没有办法启用fetch assoc 在同一页上多次使用准备好的语句 data conn gt prepare SELECT FROM some table WHERE id data gt bind param i id data gt
  • PHP 脚本不断执行 mmap/munmap

    我的 PHP 脚本包含一个循环 它只不过是回显和取消引用指针 如 tab othertab i gt 中的内容 直到昨天 这个脚本开始变得非常慢 比以前慢了 50 倍 之前 它一直运行良好 使用 strace 后 我发现 90 的情况下 脚
  • 使用 yum 和 pear 安装 php-soap 均失败

    我正在尝试在 Centos 6 4 服务器上安装 PHP 的 SOAP 扩展 我对包管理器 从 CLI 安装包并在 PHP 中配置它们相当不熟悉 我相当有能力管理 php ini 和其他 PHP 配置文件 soap ini 等 我尝试使用以
  • 扩展构建器中的“映射到现有表”显示 TYPO3 中的奇怪问题

    在我的扩展中MyExt 我映射了模型Page to pagesTYPO3 中的表 首先它向我展示了type mismatch错误 无论如何我继续保存它 会发生以下情况 我的页面树变成这样 我的新记录表单仅显示 UID 而不显示标题 My P
  • PHP 中的encodeURI() ?

    PHP 中是否有一些不编码的encodeURI 函数 我现在用这个 function encodeURI url http php net manual en function rawurlencode php https develope
  • 使用 PHP 中的 GD 库在图像上绘图

    我创建了一个代码来生成随机图案图像 它创建一个具有给定宽度和高度的图像 并用 40x40 像素的小矩形填充它 这是我的代码
  • 点击 %40 变为 %2540

    当单击包含 符号的链接时 该网址给我 40 这就是我想要的 但是一旦我点击它 一秒钟后它就在我点击后变成了 2540 单击是在电子邮件内 然后定向到网站 其中 40 更改为 2540 我怎样才能让它停止变化 它现在得到这样的参数 email
  • python中有没有一种方法可以将存储在列表中的正则表达式模式列表应用到单个字符串?

    我有一个正则表达式模式列表 存储在列表类型中 我想将其应用于字符串 有谁知道一个好方法 将列表中的每个正则表达式模式应用于字符串 和 如果匹配 则调用与列表中该模式关联的不同函数 如果可能的话我想用 python 来做这件事 提前致谢 im
  • 我可以让 swagger-php 在查询字符串上使用数组吗?

    我使用 Swagger php 当我定义查询字符串上的参数时 它可以是一个数组 但据我所知 它不支持这种查询字符串 https api domain tld v1 objects q 1 q 5 q 12 我相信这会被设定in the co

随机推荐