Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 返回两个字符串之间的值_Php_Regex_String_Replace_Str Replace - Fatal编程技术网

Php 返回两个字符串之间的值

Php 返回两个字符串之间的值,php,regex,string,replace,str-replace,Php,Regex,String,Replace,Str Replace,我知道这可能是一个常见的问题,但我找不到我想要的确切答案 我有下面的字符串 #|First Name|# Random Text #|Last Name|# 我想做的是将|和|#之间的所有值替换为一个值。这必须在一个数组中,这样我就可以循环遍历它们 我举了一个例子: #|First Name|# 处理后,我希望它是: John 因此,主要的逻辑是使用名字值从数据库打印出一个值 有人能帮帮我吗 这是我尝试过的代码: preg_match('/#|(.*)|#/i', $html, $ret)

我知道这可能是一个常见的问题,但我找不到我想要的确切答案

我有下面的字符串

#|First Name|#
Random Text
#|Last Name|#
我想做的是将
|
|#
之间的所有值替换为一个值。这必须在一个数组中,这样我就可以循环遍历它们

我举了一个例子:

#|First Name|#
处理后,我希望它是:

John
因此,主要的逻辑是使用名字值从数据库打印出一个值

有人能帮帮我吗

这是我尝试过的代码:

preg_match('/#|(.*)|#/i', $html, $ret);
谢谢你,除了让你的正则表达式不贪心和避开竖条之外,你还需要:

$replacements = array( 'John', 'Smith');
$index = 0;
$output = preg_replace_callback('/#\|(.*?)\|#/i', function( $match) use ($replacements, &$index) {
    return $replacements[$index++];    
}, $input);
这:


你不需要preg_match_all吗?+1如果事先知道所有搜索,这是一个更有效的解决方案。谢谢你,但我需要一个正则表达式,因为
名字和
姓氏可以命名为其他名称,而且我不知道,因为它将从自定义表中选择回调参数为我抛出了一个错误<代码>语法错误,意外的T_函数
@Sandeep-您的旧PHP版本不支持匿名函数。
string(24) "John
Random Text
Smith"
$string = '#|First Name|#
Random Text
#|Last Name|#';
$search = array(
    '#|First Name|#',
    '#|Last Name|#',
);
$replace = array(
    'John',
    'Smith',
);
$string = str_replace($search, $replace, $string);