2012-07-19 68 views
0

我知道这可能是一个常见问题,但我无法找到我想要的确切答案。两个字符串之间的返回值

我有以下字符串。

#|First Name|# 
Random Text 
#|Last Name|# 

我希望做的是有一切都在#| & |#之间的值,并更换整个字符串的值。这必须在一个数组中,这样我才能遍历它们。

因此,作为一个例子,我有:

#|First Name|# 

处理,我想它是后:

John 

所以主要的逻辑是使用的第一个name值打印出来自数据库的价值。

有人可以帮我在这里。

这是代码,我已经试过:

preg_match('/#|(.*)|#/i', $html, $ret); 

感谢

+0

难道你不需要preg_match_all吗? – Julio 2012-07-19 20:41:48

回答

1

你需要preg_replace_callback()为此,除了让你的正则表达式非贪婪和逃避竖条:

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

will output

string(24) "John 
Random Text 
Smith" 
+0

回调参数对我来说是一个错误..'语法错误,意外的T_FUNCTION' – 2012-07-19 20:55:36

+0

@Sandeep - 您有一个不支持匿名函数的旧版PHP版本。 – nickb 2012-07-20 00:24:28

1
$string = '#|First Name|# 
Random Text 
#|Last Name|#'; 
$search = array(
    '#|First Name|#', 
    '#|Last Name|#', 
); 
$replace = array(
    'John', 
    'Smith', 
); 
$string = str_replace($search, $replace, $string); 
+0

+1如果事先知道所有的搜索,这是更高效的解决方案。 – nickb 2012-07-19 20:46:44

+0

谢谢你,但我需要一个正则表达式,因为'First Name'和'Last Name'可以被命名为别的东西,我不知道它会从自定义表中选出 – 2012-07-19 20:52:15

相关问题