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);
精彩评论