preg_replace null与特定数据

时间:2017-01-02 00:47:53

标签: php regex preg-replace

如何使用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);

1 个答案:

答案 0 :(得分:0)

你的正则表达式有点偏。 im修饰符无法执行任何操作,您当前的捕获机制不会允许您将名称和NULL值分开。此外,return无法执行任何操作,而$name只会是01$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);

演示:https://eval.in/707446