开发者

PHP regular expression replacing calculations

开发者 https://www.devze.com 2023-01-11 19:36 出处:网络
This is some sample text from a large text file. (2, 1, 3, 2, \'text...\',\'other text...\', \'more text...\', ... ),

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

精彩评论

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