在 PHP 中模拟 LIKE

2023-11-23

有没有办法用相同的语法在PHP中模拟SQL的LIKE运算符? (% and _通配符和泛型$escape转义字符)? 这样就有:

$value LIKE $string ESCAPE $escape

你可以有一个函数,在不使用数据库的情况下返回 PHP 评估吗? (考虑到$value, $string and $escape值已经设置)。


好吧,经过很多乐趣和游戏之后,我得出的结论是:

function preg_sql_like ($input, $pattern, $escape = '\\') {

    // Split the pattern into special sequences and the rest
    $expr = '/((?:'.preg_quote($escape, '/').')?(?:'.preg_quote($escape, '/').'|%|_))/';
    $parts = preg_split($expr, $pattern, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

    // Loop the split parts and convert/escape as necessary to build regex
    $expr = '/^';
    $lastWasPercent = FALSE;
    foreach ($parts as $part) {
        switch ($part) {
            case $escape.$escape:
                $expr .= preg_quote($escape, '/');
                break;
            case $escape.'%':
                $expr .= '%';
                break;
            case $escape.'_':
                $expr .= '_';
                break;
            case '%':
                if (!$lastWasPercent) {
                    $expr .= '.*?';
                }
                break;
            case '_':
                $expr .= '.';
                break;
            default:
                $expr .= preg_quote($part, '/');
                break;
        }
        $lastWasPercent = $part == '%';
    }
    $expr .= '$/i';

    // Look for a match and return bool
    return (bool) preg_match($expr, $input);

}

我无法打破它,也许你能找到能打破它的东西。我的与 @nickb 的主要不同之处在于,我的将输入表达式“解析”(ish)为标记以生成正则表达式,而不是就地将其转换为正则表达式。

The first 3 arguments to the function should be fairly self explanatory. The fourth allows you to pass PCRE modifiers to affect the final regex used for the match. The main reason I put this in is to allow you to pass i so it is case insensitive - I can't think of any other modifiers that will be safe to use but that may not be the case. Removed per comments below

函数只是返回一个布尔值,指示是否$input文本匹配$pattern or not.

这是它的键盘

EDIT哎呀,坏了,现在修好了。新键盘

EDIT删除了第四个参数并使所有匹配项不区分大小写(根据下面的评论)

EDIT一些小修复/改进:

  • 添加了字符串断言的开始/结束到生成的正则表达式
  • 添加了对最后一个令牌的跟踪以避免多次.*?生成的正则表达式中的序列
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中模拟 LIKE 的相关文章

  • 如何将子表的删除级联到父表?

    我准备了a fiddle这说明了问题 http sqlfiddle com 15 e25c5 2 CREATE TABLE parent parent id integer primary key CREATE TABLE child ch
  • PHP GoDaddy 最大执行时间不起作用

    默认 maximun execution time 为 120 秒 我已按照所有说明创建 php ini 文件并将其放置在正确的位置 public html 中 我运行 phpinfo 发现 maximun execution time 已
  • PHP 中的致命错误是什么意思?

    我收到以下错误 致命错误 未捕获错误 调用未定义的函数 var dumb 这是什么意思 致命错误是什么意思 这是一个导致脚本中止并立即退出的错误 致命错误之后的所有语句都不会被执行
  • Woocommerce 从 woocommerce_add_to_cart_fragments 传回的错误片段

    我正在创建自定义 WooCommerce 购物车 并且更新购物车商品的数量工作正常 唯一的问题是它不会自动刷新 只有在页面加载后才起作用 我当前的代码使用woocommerce add to cart fragments挂钩并使用传入的 f
  • 如何在我的查询中使用日期格式?

    这适用于 phpmyadmin 但是当我在代码上使用时给我一个错误 错误说 解析错误 语法错误 意外的 我的语法有什么问题 gt
  • 使用 PHP 针对远程证书进行 Windows 应用商店 IAP 签名验证

    我正在尝试验证 Windows 应用商店应用程序的 PHP 中的 IAP 收据 基本上 尝试将此示例代码转换为 PHPhttp msdn microsoft com en us library windows apps jj649137 a
  • 复制具有不同列名的 MySQL 表

    我需要将 table1 中与特定列匹配的所有行复制到具有不同列名称的 table2 中 例如 table1 name oldAddressBook table1 的列 name Name Surname Number table2 name
  • 使用 laravel 5 和 Auth 更新登录的用户帐户设置

    截至今天 我对 Laravel 实际上是任何 PHP 框架 还是个新手 但对 PHP 并不陌生 我创建了我的第一个项目并设法使用预构建的登录Auth系统 我创建了一个新的路线 控制器和模型 名为AccountSettings所以当我去 ac
  • 差异:查看页面源代码与在 Firebug 中查看

    当我查看页面的页面源时 例如 http my sa ucsb edu public curriculum coursesearch aspx http my sa ucsb edu public curriculum coursesearc
  • 550 Bad HELO - 主机冒充域名 Laravel

    我正在尝试设置 Laravel 身份验证 包括 密码重置 功能 但当我尝试发送电子邮件时 我偶然发现了一个错误 我得到的错误是 Expected response code 250 but got code 550 with message
  • 使用命名占位符时 PHP/SQL 插入错误

    我有以下 PHP PDO 语句 STH this gt db gt prepare INSERT INTO UserDetails FirstName LastName Address City County PostCode Phone
  • 类型错误:translate() 只接受一个参数(给定 2 个参数)[重复]

    这个问题在这里已经有答案了 我的代码在 python 2 x 版本上运行良好 但是当我尝试在 python 3 x 版本上运行它时 出现错误 主题 需要缩写短信编码中的任何消息 Code def sms encoding data star
  • 如何知道 Solr Optimize 何时完成?

    我正在使用 Solr php client 通过 php 与 Solr 进行通信 这段代码触发solr优化命令 solr gt optimize 请问有没有什么方法可以确定优化完成了 这都是因为我的网站上有一个管理页面 我每天必须手动优化
  • 如何在 Yii 框架中从数据库中获取所有表名和列名

    我正在开发一个模块 我想在其中执行动态相关下拉表和列名称功能 前任 获取所有表名称并将其显示在下拉字段中 选择特定表后 我想在下拉字段中再次显示其所有列名称 问题是 1 如何从数据库中获取所有表名 2 如何从表中获取所有列名 我尝试了一些文
  • SQL准备语句如何通过多个可能的菜单选择进行选择?

    所以我有 4 个菜单选择 产品 位置 课程类型和类别 所有这些都可以为空 使用 JSF 编程 但这应该与这个问题无关 因为它是一个 SQL 问题 菜单选择将向托管 bean 发送用户选择的变量 并使用准备好的语句使用用户选择的菜单中的信息
  • 如何在oracle sql查询中提取括号之间的字符串

    我正在尝试从字符串中提取括号之间的值 我怎样才能做到这一点 例如 我有这个字符串 Gupta Abha 01792 我想得到括号之间的结果 即 01792 我正在尝试编写这样的查询 select substr Gupta Abha 0179
  • SQL Server 2008 中超前滞后函数的替代

    我想将当前行与下一行中的值进行比较 SQL 有LEAD and LAG函数来获取下一个和上一个值 但我无法使用它们 因为我使用的是 SQL Server 2008 那么我该如何得到这个呢 我有带输出的表 Id ActId StatusId
  • 如何在 Hibernate 中使用 SELECT 进行 INSERT

    我需要在休眠中实现以下请求 insert into my table max column values select max id from special table where 如何在休眠中使用注释来做到这一点 Special tab
  • 字符串不等于其自身

    But why if i echo good else echo bad echos gt gt bad 您应该复制此片段 如果你手写的话 它会起作用 它让我疯狂 你太狡猾了 第二个 I 不是小写拉丁文小写 i 我把它转储了 hexdump
  • 以零开头的字符串/数字的正确格式?

    我正在尝试使用 PHP 创建一个包含电话号码列表的文件 它工作正常 但如果电话号码以零开头 则该数字将从 Excel 文件中删除 有谁知道如何正确设置格式以使其保持不变 Either Set the value explicitly as

随机推荐

  • Three.js 阴影痤疮的原因是什么以及如何解决

    为了让所有阴影都能渲染出来 我设置了shadow camera top bottom left right定向光 投射阴影 但会导致阴影痤疮 我尝试使用shadow bias但还是不对 阴影痤疮的原因是什么以及如何解决 这是我的代码 lig
  • 在 SpriteKit 中,SKCropNode 对 SKShapeNode 没有影响

    我一直在尝试使用 SKCropNode 将遮罩应用于 SKShapeNode 但到目前为止没有成功 认为这是一个 SpriteKit bug 这是代码片段 SKNode contentNode SKNode node picture use
  • Haskell 进口申报

    我开始阅读有关 monad 转换器的内容 令我困惑的是Control Monad CatchIO我在许多代码示例中看到的导入声明 import MonadCatchIO transformers Control Monad CatchIO
  • Python中文件路径以字符串形式抛出错误

    我需要在 Python 中以字符串的形式放置很多文件路径作为我的程序的一部分 例如我的目录之一是D ful automate dl 但 Python 将某些字符一起识别为其他字符并抛出错误 在示例中 错误是IOError Errno 22
  • 如何在 VB6 中运行 shell 命令而不打开 CMD 窗口

    以下代码是我的 VB6 程序的一部分 我在 VB 中使用 shell 命令来使用标志和参数执行 pscp exe 我的问题是 当 VB 运行该行时 Shell strCommand 1 它还打开 CMD 窗口 2 4 秒 CMD 弹出窗口
  • 如何在Arduino上将数据写入文本文件

    我不断收到一些位置数据 目前正在将其打印到序列中 假设我有字符串 5 并希望将其打印到文本文件 myTextFile 我需要做什么才能实现此目的 需要明确的是 文本文件将保存在我的计算机上 而不是 Arduino 上的 SD 卡上 另外 在
  • 为什么 Glassfish 管理控制台这么慢?

    我正在运行 GlassFish Server 开源版 3 0 1 内部版本 22 在我的开发环境 Mac OSX 4 核和 8GB RAM 和生产环境 Linux 2 核 4GB 中 控制台的启动速度都非常慢 机器基本上闲置 玻璃鱼在做什么
  • 使用 Tkinter 将一个按钮绑定到两个事件

    我刚刚开始编程 正在制作一个井字游戏程序 在我的程序中 我有一个显示功能 它可以更改并确保输入的内容有效 还有一个获胜检查器 有没有办法可以将这两个功能绑定到回车键 就像是 RowEnt bind
  • 在 C# 的 foreach 循环中更新结构

    我有这个代码 C using System Collections Generic namespace ConsoleApplication1 public struct Thing public string Name class Pro
  • 自动将代码从 Gitlab 部署到 AWS EC2 实例

    我们正在构建一个正在使用的应用程序GitLab存储库 手动将代码部署到测试服务器亚马逊 AWS EC2 实例很乏味 我计划自动化部署过程 这样当我们提交代码时 它应该反映在测试实例中 据我所知 我们可以使用AWS代码部署从中获取代码的服务G
  • 可用于 Rails 应用程序其余部分的 CoffeeScript/JavaScript 类和方法集

    我正在使用 Rails 3 2 9 当我将 CoffeeScript 代码添加到 js coffee文件在 app assets javascripts目录中 我在所有网页中都得到了生成的 JavaScript 问题是所有 JavaScri
  • 取消异步网络请求?

    我正在使用适用于 Windows Phone 的异步 CTP 库 有谁知道如何取消待处理的网络请求 Request HttpWebRequest WebRequest Create url Request Credentials new N
  • django Rest框架序列化字典而不创建模型

    我的数据是这样的 我想序列化它们而不为它们创建模型 form 1 count 1 form 2 count 3 序列化到 form my form name 1 count 1 form my form name 2 count 3 我想用
  • 非阻塞获取字符

    平台 Linux 3 2 0 x86 Debian 7 编译器 GCC 4 7 2 Debian 4 7 2 5 我正在编写一个函数 如果标准输入中已存在字符 则从标准输入读取单个字符 如果 stdin 为空 则该函数将不执行任何操作并返回
  • 如何使用 JPA/Hibernate 设置复合主键的列顺序

    我在组合主键中的列排序时遇到问题 我有一个包含以下内容的表 Embeddable public class MessageInfo implements Serializable private byte loc private long
  • Django 脆皮表单、BaseGenericInlineFormSet 和allow_delete

    我在使用 django crispy forms 时遇到了一个问题 我无法得到答案 我有一个相当复杂的表单布局 到目前为止 一切都与 cripy forms 一起工作得非常好 表单的一部分使用通用内联表单集 这也有效 但我的问题是 我无法弄
  • 如何更改TabControl中选定选项卡的颜色?

    我正在实施一个TabControl用于 WPF 中的对话框 所选选项卡 鼠标按下 的颜色默认为白色 我想将所选选项卡的颜色更改为悬停的颜色 当我将鼠标悬停在选项卡上时 选项卡的颜色更改为 Office blue gradient 这就是我想
  • 当行包含特定文本时计算行数

    可能是一个简单的问题 但我找不到简单的答案 我们以数据框 df1 中的以下列 Status 为例 Status Planned Unplanned Missing Corrected 我想计算单元格包含 计划 和 缺失 时的行数 我尝试了以
  • 在谷歌地图反向地理编码中获取明确的城市名称

    使用 Google 地图地理编码 API 我能够获取特定坐标的格式化地址 为了获得确切的城市名称 我正在执行以下操作 ajax url http maps googleapis com maps api geocode json latln
  • 在 PHP 中模拟 LIKE

    有没有办法用相同的语法在PHP中模拟SQL的LIKE运算符 and 通配符和泛型 escape转义字符 这样就有 value LIKE string ESCAPE escape 你可以有一个函数 在不使用数据库的情况下返回 PHP 评估吗