我在PHP中有一个文本字符串:
<strong> MOST </strong> of you may have a habit of wearing socks while sleeping.
<strong> Wear socks while sleeping to prevent cracking feet</strong>
<strong> Socks helps to relieve sweaty feet</strong>
Run Code Online (Sandbox Code Playgroud)
我们可以看到,第一个强大的标签是
<strong> MOST </strong>
Run Code Online (Sandbox Code Playgroud)
我想删除第一个强标记,并在其中使用ucwords(首字母大写).结果是这样的
Most of you may have a habit of wearing socks while sleeping.
<strong> Wear socks while sleeping to prevent cracking feet</strong>
<strong> Socks helps to relieve sweaty feet</strong>
Run Code Online (Sandbox Code Playgroud)
我尝试过使用爆炸功能,但它似乎不像我想要的那样.这是我的代码
<?php
$text = "<strong>MOST</strong> of you may have a habit of wearing socks while sleeping. …Run Code Online (Sandbox Code Playgroud) $source = preg_replace('/&#(\d+);/me', "utf8_encode(chr(\\1))", $source);
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了不建议使用的警告。
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in
Run Code Online (Sandbox Code Playgroud)
如何将preg_replace()替换为preg_replace_callback()?
有人可以帮我解决这个错误吗?
警告:preg_replace():不再支持 /e 修饰符,请改用 preg_replace_callback
我的原始代码:
$match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1])));
Run Code Online (Sandbox Code Playgroud)
所以我这样试过:
$match[1] = preg_replace_callback('/(?<=^|[\x09\x20\x2D])./e',
function ($matches) {
foreach ($matches as $match) {
return strtoupper($match);
}
},
strtolower(trim($match[1])));
Run Code Online (Sandbox Code Playgroud)
但我仍然遇到同样的错误:
警告:preg_replace_callback():不再支持 /e 修饰符,请改用 preg_replace_callback
我在 $subject 上应用的替换很少,但我不想让旧替换 #(1 .. i-1) 的输出与当前替换 #i 匹配。
$subject1 = preg_replace($pat0, $rep0, $subject0);
$subject2 = preg_replace($pat1, $rep1, $subject1);
$subject3 = preg_replace($pat2, $rep2, $subject2);
Run Code Online (Sandbox Code Playgroud)
我尝试将一个preg_replace与数组用于模式和替换,希望它能够立即实现;但结果证明只是连续调用简单的preg_replace(当然有一些优化)
在我阅读了preg_replace_callback 之后,我想这不是一个解决方案。
有什么帮助吗?
我有一个问题问你!
通常,如果在OOP上下文中调用回调函数,则必须使用 array(&$this, 'callback_function')
这就是我想到的.
但是现在我想在外部类中调用一个回调,因为有很多callback_functions.出于结构原因,我想给他们一个自己的课.
我想:"好吧,制作一个这个类的实例并传递它而不是$ this."
所以,我尝试过array($cb, 'callback_function')和array($this->cb, 'callback_function'),但它不会工作.
我究竟做错了什么?
谢谢你的帮助!
编辑:
我的基础班有:
function __construct()
{
// some other vars here
$this->cb = new Callback();
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
$newline = preg_replace_callback("/(^#+) (.*)/", array(&$this->cb, 'callback_heading'), $newline);
Run Code Online (Sandbox Code Playgroud)
在我的回调课程中,我有:
class Callback
{
function __construct()
{
$this->list = array("num" => 0, "dot" => 0, "normal" => 0);
$this->td = array("strike" => false, "bold" => false, "italic" => false, "underline" => false, "code" => false);
}
public function callback_heading($parameter)
{ …Run Code Online (Sandbox Code Playgroud) 根据http://www.php2python.com/wiki/function.preg-replace-callback/ re.sub是PHP的preg_replace_callback的python等价物,但php版本需要一个数组来匹配字符串,所以你可以传递多个字符串,但re.sub似乎只接受一个字符串.
这是对的还是我对python的微弱知识?
我正在尝试在Internet上部署我的网站,以便在真实环境中对其进行测试.它是某种文本编辑器,用户可以使用正则表达式和用户定义的回调函数.
我有一些preg_replace_callback()函数的问题.我的托管有早于5.3的PHP版本,我不能在我的代码中使用匿名函数(我在localhost上有PHP 5.4).所以我必须重写这部分代码(在localhost上正常工作)
$newString = preg_replace_callback(
'#' . $this->pattern . '#' . $this->modifiers,
function($match)
{
return eval('return ' . $this->replacement . ';');
},
$string);
Run Code Online (Sandbox Code Playgroud)
在这一点上,我不是在谈论使用eval()的危险 - 这个问题稍后会得到适当的关注("禁止"单词列表检查等).问题是我的尝试如下
$replacement = $this->replacement;
$newString = preg_replace_callback(
'#' . $this->pattern . '#' . $this->modifiers,
create_function('$match', '
global $replacement;
return eval(\'return \' . $replacement . \';\');
'),
$string);
Run Code Online (Sandbox Code Playgroud)
不起作用,没有错误发生.我的代码出了什么问题?
任何帮助将非常感激.
新信息.我试过这个
Class A
{
public function check()
{
$string = 'series 3-4';
$pattern = 'series[ ]*(\d+)[ ]*-[ ]*(\d+)';
$modifiers = 'um';
$replacement = '$match[2] == …Run Code Online (Sandbox Code Playgroud) 我得到以下字符串:
last_name, first_name
bjorge, philip
kardashian, [kghim]
mer#$##Code:menu:51587daa7030e##$#cury some more
data #$##Code:menu:515r4387daa7dsf030e##$#, freddie
Run Code Online (Sandbox Code Playgroud)
我试图用函数替换中间的代码:'codeParser'正则表达式是:
$PC_File = preg_replace_callback("(?=\#\$\#\#).*?(?<=\#\#\$\#)", 'codeParser', $PC_File);
Run Code Online (Sandbox Code Playgroud)
但得到这个错误:
PHP Warning: preg_replace_callback() : Unknown modifier '.'
Run Code Online (Sandbox Code Playgroud) 好的,所以我有点困惑.这是我现在的代码,但我发现e修改器已被弃用.我如何将其转换为preg_replace_callback()?我还是没弄明白.
$post = preg_replace("/\[code\]([^] )\[\/code\]/e", 'code(\'$1\')', $post);
Run Code Online (Sandbox Code Playgroud) 我刚刚将服务器上的PHP从php 5更新到了php 7,并且收到以下警告:
警告:preg_replace_callback()[function.preg-replace-callback0]:要求参数2'chr(\ 1)'为有效的回调
警告:preg_replace_callback()[function.preg-replace-callback0]:要求参数2'chr(0x \ 1)'为有效的回调
警告:preg_replace_callback()[function.preg-replace-callback0]:要求参数2'chr(\ 1)'为有效的回调
警告:preg_replace_callback()[function.preg-replace-callback0]:要求参数2'chr(0x \ 1)'为有效的回调
这是PHP代码:
private function _decode( $source )
{
$source = html_entity_decode($source, ENT_QUOTES, 'UTF-8');
$source = preg_replace_callback('/&#(\d+);/me',"chr(\\1)", $source);
$source = preg_replace_callback('/&#x([a-f0-9]+);/mei',"chr(0x\\1)", $source);
return $source;
}
Run Code Online (Sandbox Code Playgroud)
警告来自:
$source = preg_replace_callback('/&#x([a-f0-9]+);/mei',"chr(0x\\1)", $source);
Run Code Online (Sandbox Code Playgroud)
我该如何解决?