在 PHP 中用如此命名的变量替换括号内的文本

2023-12-07

我想替换方括号中的所有字符串([])以及从名为该字符串的数组中随机选择的项目。

它非常类似于这个问题,但有一点不同,因为我想用名为该数组的字符串替换不同括号的内容。

一个例子应该会让这一点更清楚一些。

所以说我已经拿到了字符串

"This is a very [adjective] [noun], and this is a [adjective] [noun]."

和变量:

$adjective = array("big","small","good","bad");
$noun      = array("house","dog","car");

我们希望它回归"This is a very big house, and this is a good dog."或者其他什么,通过随机选择。也就是说,我想编写一个 PHP 函数来替换每个[string]从名为的数组中随机选择一个项目$string。现在,随机选择是否会导致重复选择并不重要,但它必须为每个选择做出新的选择[] item.

我希望我已经解释清楚了。如果您得到我想要实现的目标并且能想出更好的方法来实现它,我将非常感激。


算法

  1. 匹配此正则表达式:(\[.*?\])
  2. 对于每个匹配组,从相关数组中选择一个项目。
  3. 按顺序替换字符串。

执行

$string    = "This is a very [adjective] [noun], and this is a [adjective] [noun].";
$adjective = array("big","small","good","bad");
$noun      = array("house","dog","car");

// find matches against the regex and replaces them the callback function.
$result    = preg_replace_callback(

                 // Matches parts to be replaced: '[adjective]', '[noun]'
                 '/(\[.*?\])/',

                 // Callback function. Use 'use()' or define arrays as 'global'
                 function($matches) use ($adjective, $noun) {

                     // Remove square brackets from the match
                     // then use it as variable name
                     $array = ${trim($matches[1],"[]")};

                     // Pick an item from the related array whichever.
                     return $array[array_rand($array)];
                 },

                 // Input string to search in.
                 $string
             );

print $result;

解释

预替换回调函数使用提供的回调函数执行正则表达式搜索和替换。

  • 第一个参数是要匹配的正则表达式(用斜杠括起来):/(\[.*?\])/

  • 第二个参数是为每场比赛调用的回调函数。将当前匹配作为参数。

    • 我们必须使用use()此处从函数内部访问数组,或将数组定义为全局数组:global $adjective = ...。也就是说,我们必须执行以下操作之一:

      a)将数组定义为global:

      
      
        ...
        global $adjective = array("big","small","good","bad");
        global $noun      = array("house","dog","car");
        ...
        function($matches) {
        ...
        

      b) Use use:

      
      
        ...
        $adjective = array("big","small","good","bad");
        $noun      = array("house","dog","car");
        ...
        function($matches) use ($adjective, $noun) {
        ...
        
    • 回调函数第一行:

      • trim:删除方括号([])从比赛中使用trim功能。

      • ${}:创建一个变量以用作具有匹配名称的数组名称。例如,如果$match is [noun] then trim($matches[1],"[]")回报noun(不带括号)和${noun}成为数组名称:$noun。有关该主题的更多信息,请参阅变量变量.

    • 第二行随机选择一个可用的索引号$array然后返回该位置的元素。

  • 第三个参数是输入字符串。

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

在 PHP 中用如此命名的变量替换括号内的文本 的相关文章

  • Logstash if 语句与正则表达式示例

    谁能告诉我什么是if带有正则表达式的语句看起来像在logstash中 我的尝试 if fieldname 0 9 if fieldname 0 9 两者都不起作用 我打算做的是检查 fieldname 是否包含整数 将其他答案合并成一个有凝
  • 在 WooCommerce 中检查购物车中的多个产品 ID

    我使用以下代码来检查产品 ID 是否在购物车中 如果是 则添加额外的结帐字段 add action woocommerce after order notes conditional checkout field function cond
  • Doctrine 不会在 MySQL 中生成跨数据库外键约束

    我有两个表 db1 Contact 和 db2 Recipient 每个收件人都应该是联系人 因此我在 db1 Contact ContactID 字段上的两个表之间设置了外键 我在 Recipient php 中使用以下注释表示这一点 O
  • 脚本超时已过,如果要完成导入,请重新提交相同的文件,导入将恢复

    我有一个数据库 拉开拉链后的尺寸50mb拉链尺寸7mb所以当我尝试导入数据库时zipped 7mb 几分钟后 它抛出此错误 脚本超时已过 如果您想完成导入 请resubmit相同的文件和导入将恢复 我已经重新提交了 但仍然没有导入全部数据
  • 简单 php 脚本找不到对象错误

    每次我点击提交按钮在网页中处理此代码时 它都会转到 未找到对象 404 错误 页面 它发生在我的一些脚本中 我不知道问题的根源是我的本地主机 Xampp 还是我的代码 if isset POST submit require dbc php
  • 通过 PHP CURL 添加 Google 联系人

    我已经成功地通过 Zend Framework 和 PHP 将联系人添加到 google 我也希望能够通过 CURL 来做到这一点 有人有关于如何执行此操作的良好教程吗 我终于能够通过 CURL 和访问令牌来做到这一点 首先 我要说的是OA
  • 如何在 php 中访问名为变量的对象属性?

    以 JSON 编码的 Google API 返回一个如下所示的对象 updated gt stdClass Object t gt 2010 08 18T19 17 42 026Z 任何人都知道我如何访问 t value object gt
  • 如何获取共同好友列表

    你好 我想知道如何才能找到共同的朋友 我目前在思考这个问题时遇到问题 我有一个名为 users 的表 它是这样的 id name 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8
  • 如何简单地检查服务器PHP版本是否为5或以上?

    我正在为程序创建预安装清单 该程序需要 PHP5 因此我需要检查列表脚本来检查 PHP5 的可用性 有一个函数为phpversion 将以以下格式返回5 3 6或类似的 然而 我希望清单非常简单 只是告诉你是或否 所以显示当前版本对我没有多
  • Bash 字符串之间的比较 - 相等但不相等

    我只想在 Bash 中的两个字符串之间进行非常简单的比较 stat curl Is url head n 1 echo stat if stat HTTP 1 1 200 OK then echo symbol is OK echo sta
  • drupal 7 将实际内容存储在数据库中的哪里?

    我打开了 drupal 7 的数据库并在表中查找node node revisions and node types并且找不到 drupal 存储实际的位置body节点 内容 的 有人有线索吗 哦 我刚刚找到了 在 D7 中 他们实现了字段
  • AJAX VS PHP 动态网页?

    当您只能使用 php 来实现动态网页时 为什么要使用 AJAX 呢 使用 AJAX 的主要原因是用户体验 UX 现在 AJAX 不一定会改善每个实例的用户体验 所以在很多地方坚持使用纯 PHP 完全没问题 但想象一下这样的情况 网站上有一个
  • 从存储库获取时,Doctrine 如何在不调用 __construct 方法的情况下创建实体?

    我在构造函数中编写了下一个代码 public function construct die creating entity 当我创建实体实例时new运算符如 entity new Entity 我看到creating entity text
  • PHP 使用今天的日期生成一个随机数

    我正在尝试为内容块 在网页上 分配一个随机生成的数字 该数字基于今天的日期 无论是什么 和固定数字 由于某种原因 输出的数字种类存在巨大差异 例如 当我在本地测试我的代码时 生成的数字对我来说足够好 正数 但在实际的实时服务器上时 它们通常
  • 找时间通过 PHP 执行 MySQL 查询

    我在互联网上看到过这个问题 here http www phpbuilder com board showthread php t 2100256 and here http answers yahoo com question index
  • 数组到命名变量

    我该如何服用 userarray 这是一个数组 我知道它包含 3 个值 并将它们放入 3 个单独的变量中 而不是循环遍历 那里隔着 commas 所以爆炸会在某个地方发生 Say userfield1 userfield2 userfiel
  • dataTables fnFilter 列 on img 文件名

    我正在尝试根据标签的 src 属性中的图像文件名来过滤列 我的行看起来像这样 tr class unread odd td class td tr
  • PHP 7.2 计数错误

    警告 count 参数必须是数组或对象 实现 Countable in 我在以下行中收到上述错误 if 0 gt count this gt xprop 有人可以帮助我理解这一点吗 我对 PHP 还很陌生 问题显然是 this gt xpr
  • Laravel 5:在控制台内核的 Schedule() 函数中使用 Cache:: 或 DB::

    我正在尝试以不同的用户配置的时间间隔在 Laravel 5 中运行 Artisan 控制台命令 我已经构建了控制台命令 并拥有一个包含 运行频率 配置值的数据库 具有 Eloquent 模型 内schedule 的函数App Console
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in

随机推荐

  • 如何在 kivy 小部件上模拟用户操作? (以单击按钮为例)

    我想模拟用户操作 在查看文档后 我看到了Clock schedule once my callback 1 问题 这是唯一的方法吗 我更喜欢类似的东西my button press 我想按下按钮 然后它就会打电话my callback 我不
  • 用于文本文件名称提取的正则表达式

    我有一个包含作者和摘要列表的纯文本文件 我正在尝试仅提取作者姓名以用于网络分析 我的文本遵循此模式并包含 500 多个摘要 2010 NUCLEAR FORENSICS OF SPECIAL NUCLEAR MATERIAL AT LOS
  • SQL 注入 DROP TABLE 不起作用

    我需要使用 PHP MySQL 演示 SQL 注入 我想在登录表单中注入 DROP TABLE 查询 但它永远不起作用 TRUNCATE 表工作正常 OTOH 我输入后 drop table users 作为字段输入 查询结果是 SELEC
  • 按函数对 python 列表进行排序

    我有一个函数 它接受一个对象作为参数并给我一个数字 我希望使用这个数字作为对我的列表进行排序的键 如果我要迭代该列表 我会执行以下操作 sorted list for object in my list of objects i my nu
  • python 中的实例

    我创建了以下示例来理解 python 中的实例 import time class test mytime time time def init self self mytime time time time sleep 1 pass fr
  • 如何使用自签名 OpenSSL 证书在 HTTPS 上测试 PWA?

    我可以使用 localhost 通过 http 测试 serviceworkers 但我想在移动浏览器上测试 因为它是一个单独的设备 所以我无法使用本地主机 所以我使用 PC 的名称 所以现在我需要使用 https 这会在我的服务工作线程中
  • 如何正确序列化和反序列化 CSV?

    我一直在尝试将对象序列化为 CSVString但该对象包含一个List and JsonUnwrapped不起作用List对象 预期样本输出 color part name n red gearbox n red door n red bu
  • 纯 Javascript 图像处理库(二进制形式,不通过 DOM)

    Since File API将允许访问content对于本地文件 现在可以在上传之前调整图像大小 这是一项相当常见的任务 而无需任何其他技术 例如 Flash 或 Silverlight 除了我找不到任何能够处理二进制形式图像的 Javas
  • 调用未定义的函数 mime_content_type(),无法更改服务器设置

    我在标题中发现了错误 调用未定义的函数mime content type 我读过有关重新编译 PHP 以及使用finfo open FILEINFO MIME TYPE 后者的问题是我的PHP版本是5 2 15 太旧了 不支持finfo 所
  • OSGI 发布时暴露“ClassNotFoundException: org.w3c.dom.***”错误

    我只在Activator start 函数中写了以下代码 public void start BundleContext bundleContext throws Exception Activator context bundleCont
  • 尽管 C++ 迭代器不是指针,但为什么它可以被取消引用?

    我正在阅读 C Primer 5th 遇到如下代码 string s some string if s begin s end auto it s begin it toupper it it从迭代器接收一个值到字符串中的第一个字符s 然后
  • 如何根据对象名称重新绑定矩阵?

    我有几个想要的矩阵rbind在一个总结中 它们是不同功能的对象产品 并且它们的名称具有相同的模式 我想做的是告诉 R 查找具有该共同模式的所有对象 然后rbind them 假设这些矩阵存在 commonname N1 lt matrix
  • 如何在 WebStorm 中调试角度量角器测试

    有一种方法可以在 WebStorm 中运行和调试量角器 Web 测试 我只是想分享this在这里回答 获取节点路径 类型which node在你的终端中 在 WebStorm 中 单击 编辑配置 左侧的下拉菜单Run 按钮 绿色箭头就像 播
  • 什么是 IO 流缓冲?

    我无法找到 IO 流缓冲的基本概念及其含义 任何教程和链接都会有所帮助 缓冲是处理输入和输出的软件的基本部分 由于硬件和软件以不同的速度运行 因此缓冲区保存软件接口和硬件接口之间的数据 产生数据的组件可以将其放入缓冲区 然后通过将收集到的数
  • 是否可以使用javascript从目录中读取文件?

    我想读取一个目录并用这些文件的名称填充列表 是否可以使用 javascript 来完成此任务 不 出于安全原因 您也许可以通过调用 ActiveX 或 Flash 并让用户同意允许从这些插件访问文件系统来实现此目的 但请不要这样做 编辑10
  • 如何显示固定的 Vuetify v-date-picker 范围?

    我正在尝试显示 Vuetify 日期range具有特定行为的选择器 用户只能选择日历上的开始日期 该范围有固定的持续时间 所以如果这个持续时间设置为4天 当你点击11月4日时 它会显示从4日到8日的范围 是否可以覆盖 v date pick
  • 如何在pandas中仅在一个级别创建组

    我在 excel 文件中导入下面的 df3 数据框 并希望仅按名称分组 其余重复数据应如下所示 注意 每月数据将按月添加 Df3 pd read Excel Data print df3 Name ID Month Shift Jon 1
  • 为什么 iPad 上的 AES 加密和 PHP 解密会失败?

    我有一个 iPad 应用程序 可以将加密信息传输到基于 PHP 的网站 但我在正确解密此信息时遇到困难 我使用以下代码进行PHP端解密 Decryption function function mc decrypt decrypt key
  • 将 None 转换为空字符串的最惯用方法? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 执行以下操作最惯用的方法是什么 def xstr s if s is None return else return s s xstr a xstr b update 我采纳了 Trypt
  • 在 PHP 中用如此命名的变量替换括号内的文本

    我想替换方括号中的所有字符串 以及从名为该字符串的数组中随机选择的项目 它非常类似于这个问题 但有一点不同 因为我想用名为该数组的字符串替换不同括号的内容 一个例子应该会让这一点更清楚一些 所以说我已经拿到了字符串 This is a ve