假设,我有一个字符串' @ [52:]非常爱他的母亲'。我希望用“艾伦非常爱他的母亲”来取代字符串'。 说明:当我的字符串中找到任何匹配语法' @ [numeric_id:]'然后这些匹配将被替换为存在的用户名,其中包含' numeric_id'在' user_entry'表。如果在字符串中找到匹配但未找到用户在&user;注册用户中使用numeric_id然后它将返回完整的字符串,如' @ [52:]非常爱他的母亲'。
我尝试用' preg_replace'在PHP中的功能。 '的preg_replace'使用语法' @ [numeric_id:]'成功收集所有匹配项但它无法将匹配发送到名为' test()'的用户定义函数。简而言之,我的代码无效。
我在test.php文件中有以下代码:。
<?php
function test($v) { $con=mysqli_connect("mysql14.000webhost.com","a8622422_jhon","pjdtmw7","a8622422_person");
$safe_id=preg_replace("/[^0-9]/",'',$v);
$sql="SELECT * FROM user_entry WHERE u_id='$safe_id'";
$result=mysqli_query($con,$sql);
$count=mysqli_num_rows($result); $found='';
if ($count==1) {
$row=mysqli_fetch_array($result);
$found=$row['name'];
} else { $found=$v; } return $found;
} ?>
<?php
$post='@[61150631867349144:] & @[59670019475743176:] are friends';
echo preg_replace('/(@\[[0-9]+\:+\]+)/',test('$1'),$post);
?>
我认为,代码应该返回:&#39; Baki Billah,Mahfuzur rahman和mahi是朋友&#39;。但它返回:&#39; @ [61150631867349144:]&amp; @ [59670019475743176:]是朋友&#39;。
我该怎么做?我的代码出了什么问题?有什么办法吗?如果用上述代码无法执行操作,那么请给我正确的&amp; test.php文件的完整代码,以便我可以执行我的问题的第一部分中解释的操作。
我们非常感谢任何帮助(我正在使用php)。 提前谢谢。
答案 0 :(得分:1)
如果要为正则表达式的每个匹配执行代码,最好的方法是使用preg_replace_callback
函数。它可以采用与您现在使用的模式相同的模式,但会为每个匹配调用给定的函数。
例如:
echo preg_replace_callback('/(@\[[0-9]+\:+\]+)/', 'test', $post);
您将需要修改您的测试函数,以获得一系列子匹配。 $v[0]
将是整个字符串匹配。