如何将 preg_replace 中的参数传递给 PHP 中的函数?
How to pass parameter in preg_replace to a function in PHP?
我想做这样的事情:
我有这个字符串:
Lorem ipsum {shortcode 42} dolor sit amet.
我想这样解析:
preg_replace('/\{shortcode (\d+)\}/i', MyClass::myFunction('') , $content);
MyClass
代码如下所示:
class MyClass {
public static function myFunction(string $id) {
// ...
return 'hello world';
}
}
但是在myFunction()
中$id
永远是</code>字符串,而不是原来的内容<code>
,什么是数字。
如何将参数中的 preg_replace 替换值传递给我的函数?
使用 class 的静态方法作为回调的简单示例:
class MyClass {
static function myFunction($arg) {
return "[Hello, {$arg[1]}]";
}
}
$content = 'Lorem ipsum {shortcode 42} dolor sit amet.';
echo preg_replace_callback('/\{shortcode (\d+)\}/i', 'MyClass::myFunction', $content);
不重写您的 class 方法,使用 preg_replace_callback
中的匿名函数调用您的方法,使用索引 1
作为第一个捕获组匹配:
$result = preg_replace_callback('/\{shortcode (\d+)\}/i',
function($m) {
return MyClass::myFunction($m[1]);
}, $content);
或者您可以调用静态方法,但是您需要使用那里的参数的 1
索引:
// ['MyClass', 'myFunction'] or 'MyClass::myFunction'
$result = preg_replace('/\{shortcode (\d+)\}/i', ['MyClass', 'myFunction'], $content);
class MyClass {
public static function myFunction(array $array) {
// use $array[1]
return 'hello world';
}
}
我想做这样的事情:
我有这个字符串:
Lorem ipsum {shortcode 42} dolor sit amet.
我想这样解析:
preg_replace('/\{shortcode (\d+)\}/i', MyClass::myFunction('') , $content);
MyClass
代码如下所示:
class MyClass {
public static function myFunction(string $id) {
// ...
return 'hello world';
}
}
但是在myFunction()
中$id
永远是</code>字符串,而不是原来的内容<code>
,什么是数字。
如何将参数中的 preg_replace 替换值传递给我的函数?
使用 class 的静态方法作为回调的简单示例:
class MyClass {
static function myFunction($arg) {
return "[Hello, {$arg[1]}]";
}
}
$content = 'Lorem ipsum {shortcode 42} dolor sit amet.';
echo preg_replace_callback('/\{shortcode (\d+)\}/i', 'MyClass::myFunction', $content);
不重写您的 class 方法,使用 preg_replace_callback
中的匿名函数调用您的方法,使用索引 1
作为第一个捕获组匹配:
$result = preg_replace_callback('/\{shortcode (\d+)\}/i',
function($m) {
return MyClass::myFunction($m[1]);
}, $content);
或者您可以调用静态方法,但是您需要使用那里的参数的 1
索引:
// ['MyClass', 'myFunction'] or 'MyClass::myFunction'
$result = preg_replace('/\{shortcode (\d+)\}/i', ['MyClass', 'myFunction'], $content);
class MyClass {
public static function myFunction(array $array) {
// use $array[1]
return 'hello world';
}
}