如何使用preg_replace
替换文字中的null
字词,其中的网址以用户名结尾?
例如:
替换此
中的null
(1, 3, 'sam', 'sam-website', 'yes', 'null'), (2, 3, 'alex', 'alex-website', 'yes', 'null'), (3, 3, 'kabor', 'kabor-website', 'yes', 'null'),
得到这个
(1, 3, 'sam', 'sam-website', 'yes', 'http://mywebsite.com/pics.php?id=sam'), (2, 3, 'alex', 'alex-website', 'yes', 'http://mywebsite.com/pics.php?id=alex'), (3, 3, 'kabor', 'kabor-website', 'yes', 'http://mywebsite.com/pics.php?id=kabor'),
尝试了这个,但它没有工作
$name = preg_match('/3, \'(.*?)\',/im', $string, $matches);
$url = preg_replace_callback('/null(?=)/', function ($name){
return ($matches[1]);
}, $string);
答案 0 :(得分:0)
你的正则表达式有点偏。 im
修饰符无法执行任何操作,您当前的捕获机制不会允许您将名称和NULL
值分开。此外,return
无法执行任何操作,而$name
只会是0
或1
($matches
是捕获的值)。< / p>
我会在括号之间提取所有值,然后使用CSV解析器获取每个数据点。从那里你可以重建你的字符串并将其返回。
以下是一个例子:
$string = "(1, 3, 'sam', 'sam-website', 'yes', 'null'), (2, 3, 'alex', 'alex-website', 'yes', 'null'), (3, 3, 'kabor', 'kabor-website', 'yes', 'null'),";
echo preg_replace_callback('/\(([^)]+)/', function ($match) {
$data = str_getcsv($match[1], ',', "'");
$return = '(';
foreach($data as $key => $element) {
if(is_numeric($element)) {
$return .= $element;
} else {
if($key == (count($data) - 1)) {
$return .= "'http://mywebsite.com/pics.php?id=" . $data[2] . "'";
} else {
$return .= "'" . $element . "'";
}
}
$return .= ', ';
}
return rtrim($return, ', ');
}, $string);