PHP регулярное выражение, заменяющее вычисления - PullRequest
1 голос
/ 14 августа 2010

Это пример текста из большого текстового файла.

(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...', ... ), 

Теперь мне нужно добавить 19 к каждому значению первого столбца ...

(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...', 'more text...', ... ),
(25, 1, 3, 2, 'text...','other text...', 'more text...', ... ), 

preg_replace_callback () кажется решением, но яя не очень привык к регулярным выражениям ...

Ответы [ 2 ]

1 голос
/ 14 августа 2010
preg_replace_callback(
    '/(?<=\()(\d+)(?=,.+\),?\v)/',
    function($match) {
        return (string)($match[1]+19);
    },
    $large_text
);
0 голосов
/ 14 августа 2010

Это будет сделано для стандартного ввода.

// 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...