开发者

PHP regular expression replacing calculations

This is some sample text from a large text file.

(2, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(3, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(4, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(5, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(6, 1, 3, 2, 'text...','other text...', 'more text...', ... ), 

Now I need to to add 19 to each value of the first column...

(21, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(22, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(23, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(24, 1, 3, 2, 'text...','other text...', 'm开发者_运维知识库ore text...', ... ),
(25, 1, 3, 2, 'text...','other text...', 'more text...', ... ), 

preg_replace_callback() seems the solution, but I'm not really used to regular expressions...


preg_replace_callback(
    '/(?<=\()(\d+)(?=,.+\),?\v)/',
    function($match) {
        return (string)($match[1]+19);
    },
    $large_text
);


This would do it for stdin.

// Your function
function add19($line) {
    $line = preg_replace_callback(
        '/^\(([^,]*),/',
        create_function(
            // single quotes are essential here,
            // or alternative escape all $ as \$
            '$matches',
            'return ("(" . (intval($matches[1])+19) . ",");'
        ),
        $line
    );
    return $line;
}

// Example reading from stdin
$fp = fopen("php://stdin", "r") or die("can't read stdin");
while (!feof($fp)) {
    $line = add19(fgets($fp));
    echo $line;
}
fclose($fp);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜