问题标签 [preg-replace-callback]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
613 浏览

php - 这个 preg_replace_callback 在 PHP 中做了什么?以及如何阻止它泄漏内存?

我在 b2evo PHP 网站上有一段代码,它执行以下操作:

这部分代码是做什么的?我的猜测是它会去除 128 到 256 之间的 ascii 字符,但我不能确定。

此外,就目前而言,每次从页面中调用这段代码时,PHP 都会分配然后不释放多达 2K 的内存。如果该函数在一个页面上被调用 1000 次以上(这可能发生),那么该页面会使用额外的 2MB 内存。

这导致我的 Web 应用程序出现问题。为什么我会丢失内存,以及如何重写它以免出现内存泄漏?

0 投票
3 回答
1001 浏览

php - preg_replace_callback() 内存问题

我在测试查找/替换功能时遇到内存问题。

假设搜索主题是:

要找到的字符串:

替换函数回调:

和电话:

现在,从数据库中提取了完整的搜索模式。到目前为止,它是:

然后在 7 个 mysql 表的 23 列中查找此 $find 模式(如果找到则替换)。

使用建议的 preg_replace() 而不是 preg_replace_callback() 似乎已经解决了内存问题,但我遇到了新问题:preg_replace() 返回的主题缺少很多内容......

更新:

内容丢失是由于使用 preg_quote($find,'/'); 它现在可以工作了,除了... 'A+' 在这个过程之后变成了 'A '。

0 投票
3 回答
497 浏览

php - 解析文本中的 bbcode youtube 标签并替换为包含视频 ID 的 html

我正在构建一个应该解析 bbcode 标签的博客,如下所示:

输入:<youtube=http://www.youtube.com/watch?v=VIDEO_ID&feature=channel>
输出:

到目前为止,我的功能非常简单,因为我已经陷入了最简单的部分!现在,我有一个主进程函数,它调用不同的进程函数。在这种情况下,其中之一是 processYouTubeVideos()。所以我这样称呼它:

processYouTubeVideos() 完美地接收来自 youtube 标记内部的 URL,但由于某种原因,当使用 explode() (或拆分)时,永远找不到分隔符。即使使用“u”或“tube”之类的测试值......

0 投票
1 回答
417 浏览

php - preg_replace_callback - 做两次

哟,我正在尝试使此脚本正常工作,但它不起作用。我怎么做两次,preg_replace_callback 有两个不同的功能。谢谢!

0 投票
2 回答
144 浏览

php - 正则表达式:与 preg_replace_callback 一起使用的语法错误?

我从这个链接借用了代码PHP regex templating - 找到所有出现的 {{var}}以实现将值应用于模板文件的方法。这使用 preg_replace_callback() 函数

我首选的命名方法是 name1.name2.name3=value,而不是 name1_name2_name3=value,但我使用的正则表达式似乎有问题。

这个不行

模板文件

.ini 值

使用的正则表达式

print_r($matches) 的输出

替换是错误的,因为 $matches[1] 是错误的键键。

我怀疑有些库已经提供了这个功能并且很想知道它们,但我仍然想知道正则表达式的错误。

带有错误正则表达式的完整代码如下。

要匹配的模板

.ini 文件的内容

0 投票
1 回答
656 浏览

php - 正则表达式通过命名(子)组从类似 xml 的标签中提取/替换值

尝试在 PHP 中创建一个简单的文本翻译器。

它应该匹配如下:

语言可以是可选的

这是代码:

它提取“属性”,但只获取最后一个。我的第一个想法是,它与组命名有关,当 PHP 在每次匹配时覆盖(命名)数组元素时。但省略组命名它也只返回最后一场比赛。

这是一个返回给回调的数组作为示例

0 投票
1 回答
176 浏览

php - 正则表达式,preg_replace_callback 问题 PHP

这就是我为我的 RegEx 所做的,我想知道这是否是最好的方法。

无论标识符之间的间距如何,我都希望能够找到类似的东西,并且不区分大小写。如果可能的话,不要担心订单..

例子:

这是我现有的代码:

0 投票
2 回答
1825 浏览

php - PHP preg_replace_callback 的正则表达式

正则表达式不是我的事。:(

我有一个可能包含多个子字符串的字符串,例如:

我基本上需要用获取每个变量的函数的结果替换每次出现。

我期待111, 222, 333, 444

但我感觉不到爱。任何帮助,将不胜感激!

编辑:一些澄清..

为了这个问题,我正在简化。

  1. “vars”不会真正被称为“var1”,“var2”更像 [recID="22" template="theName" option="some value", type="list"]

  2. 回调会比我的简单内爆更复杂......我会使用“id”并连接到数据库,获取记录并将它们插入模板......因此需要回调......

  3. 匹配的值几乎可以是任何东西,而不仅仅是数字。

0 投票
3 回答
123 浏览

php - 我能以某种方式知道在 preg_replace_callback 的回调中发生了哪个替换吗?

我正在使用preg_replace_callback替换字符串中的特定标记。但除了实际的标记之外,我还需要知道该标记是主题字符串中的第一个、第二个还是第三个。有没有办法访问该信息?

我在 preg_replace_callback 定义(http://php.net/manual/en/function.preg-replace-callback.php )中找到了一个参数$count,它计算了替换,但我不确定它是否可以从回调中访问. 在所描述的上下文中使用的任何示例?

0 投票
3 回答
12076 浏览

php - 有没有办法在 preg_replace_callback 回调函数中传递另一个参数?

嗯,伙计们,我真的希望我的英语能很好地解释我需要什么。

让我们举这个例子(这只是一个例子!)的代码:

所以,php手册说要使用类方法作为回调preg_replace_callback(),方法必须是抽象的。

Something我需要在回调函数中传递预先初始化的对象的实例(在示例中为类的实例)。

我尝试使用call_user_func(),但不起作用(因为这样我错过了matches参数)。

有没有办法做到这一点,或者让我分开这个过程(在之前做preg_match_all,为每个匹配检索替换值,然后是一个简单的preg_replace)?

编辑:作为旁注,在汤姆海格回答之前,我使用了这个解决方法(在示例中,这是替换方法):

希望可以帮助某人。