Как использовать Regexp в MySQL Replace Commands?

C#:

string myString = null;

if (myString.Equals("someValue")) // NullReferenceException...
{

}

if ("someValue".Equals(myString)) // Just false...
{

}
5
задан picardo 6 September 2009 в 03:21
поделиться

3 ответа

Как уже упоминалось другими, вы не можете сделать это в MySQL. Однако, похоже, что это одноразовая операция, которую вам нужно сделать, поэтому я написал вам быстрый и грязный небольшой скрипт php, чтобы выполнить эту работу. Предполагается, что в вашей таблице node_revisions есть столбец первичного ключа с именем «id». Если нет, отредактируйте соответствующим образом. Кроме того, не забудьте изменить хост базы данных, имя пользователя, пароль и имя базы данных в верхней части скрипта, чтобы они соответствовали вашей конфигурации.


<?php
$host = '127.0.0.1';
$username = 'root';
$password = 'password';
$database = 'test';

$conn = mysql_connect($host, $username, $password);

if (!$conn) {
    echo "Unable to connect to DB: " . mysql_error();
    exit;
}

if (!mysql_select_db($database)) {
    echo "Unable to select " . $database . ": " . mysql_error();
    exit;
}

$sql = "SELECT * FROM node_revisions";

$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

while ($row = mysql_fetch_assoc($result)) {
    $id = $row['id'];
    $body = $row['body'];
    $teaser = $row['teaser'];
    $body = preg_replace('/http:\/\/.*?\.pdf/', '/migration-update', $body);
    $teaser = preg_replace('/http:\/\/.*?\.pdf/', '/migration-update', $teaser);
    $sql = "UPDATE node_revisions set body='" . mysql_real_escape_string($body) . "', teaser='" . mysql_real_escape_string($teaser) . "' where id=" . $id;
    mysql_query($sql);
}

mysql_free_result($result);
mysql_close($conn);
?>

Также обратите внимание, что я использовал не жадный модификатор для регулярных выражений, так что если вы иметь несколько URL-адресов pdf в теле или тизере, вы не потеряете все между ними.

7
ответ дан 18 December 2019 в 13:16
поделиться

REPLACE () выполняет замену текста. В MySQL нет замены регулярных выражений.

1
ответ дан 18 December 2019 в 13:16
поделиться

Краткий ответ: вы не можете использовать базовый MySQL.

Длинный ответ: этот предыдущий вопрос SO , в котором упоминается, что вы можете сделать это с помощью UDF (пользователь -определенная функция). Однако для этого требуется перекомпоновка MySQL с включением udf.

6
ответ дан 18 December 2019 в 13:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: