MySQL - REGEXP_REPLACE() Function



Regular expressions in MySQL are used in search operations to not only filter records but also replace the pattern occurrences in a string.

Consider a scenario where you noticed a spelling error among the huge sets of data present in a MySQL database. Now, you are supposed to correct all occurrences of these errors in this database without disturbing the other data. This is where regular expressions are extremely advantageous.

You can use regular expressions to find the accurate occurrences of the same error and replace it with the right characters. This is done using the regexp_replace() function.

MySQL REGEXP_REPLACE() Function

The MySQL regexp_replace() function is used to find and replace occurrences of a string that match specific patterns. If there's a match, it replaces the string with another. If there's no match, it returns the original string. If the string or pattern is NULL, it returns NULL. You can use a regular expression or a simple string as the pattern in this function.

Syntax

Following is the syntax of the MySQL regexp_replace() function −

REGEXP_REPLACE(expr, pattern, repl[, pos[, occurrence[, match_type]]])

Parameters

The regexp_replace() function takes following parameter values −

  • expr: The string in which search is performed

  • pattern: The pattern that is searched in the string

  • repl: The replacement string

This method also accepts following optional arguments −

  • pos − Starting position of the search

  • occurrence − Which occurrence of a match to replace. If omitted, the default is 0 so it replaces all occurrences.

  • match_type − A string that specifies how to perform matching.

Example

In the following query, we are performing a search operation on a simple string using the MySQL REGEXP_REPLACE() function −

SELECT REGEXP_REPLACE('Welcome To Tutorialspoint!', 'Welcome', 'Welll')
AS RESULT;

As we can observe the output below, the string 'Welcome' is found and replaced with 'Welll' −

RESULT
Welll To Tutorialspoint!

But if the pattern is not found in the string, the original string is displayed by the function. Look at the following query −

SELECT REGEXP_REPLACE('Welcome To Tutorialspoint!', 'H', 'Hi') AS RESULT;

On executing the given query, the output is displayed as follows −

RESULT
Welcome To Tutorialspoint!

Example

Let us also try to pass optional arguments to this function as case-insensitive matching(i). Here, the search starts from the 10th position in the given string; and as we are passing the occurrence value as 1, only the first occurrence of the letter 't' after 10th position will be replaced irrespective of its case −

SELECT REGEXP_REPLACE('Welcome To Tutorialspoint!', 't', 'x', 10, 1, 'i') AS RESULT;

Output

The output for the program above is produced as given below −

RESULT
Welcome To xutorialspoint!

Example

The following query replaces all the occurrences of the string "is" in the given text −

SELECT REGEXP_REPLACE('This is a sample string', 'is', '@@@@')
As Result;

Output

On executing the given query, the output is displayed as follows −

RESULT
Th@@@@ @@@@ a sample string

Example

The following query replaces only the first occurrence of the string "This" in the given text with "That" −

SELECT REGEXP_REPLACE('This is a test and This is another test', '^This', 'That')
As Result;

Output

The output for the query above is produced as given below −

RESULT
That is a test and This is another test

Example

Here, the below query replace the words 'wall' or 'floor' with the word 'bed' in the given string using the MySQL REGEXP_REPLACE() function −

SELECT REGEXP_REPLACE ('Humpty dumpty sat on a wall and slept on the floor', 'wall|floor', 'bed') As Result;

Output

On executing the given program, the output is displayed as follows −

RESULT
Humpty dumpty sat on a bed and slept on the bed

Example

The following query replaces the first occurrence of the string "eat" with the string "drink" in the provided input string.

In the query, the fourth parameter "1" specifies the position to start the search and the fifth parameter "1" is the number of replacements to be made. Therefore, only the first occurrence of "eat" is replaced with "drink".

SELECT REGEXP_REPLACE('eat sleep repeat and eat', 'eat', 'drink', 1, 1)
As Result;

Output

Following is the output −

RESULT
drink sleep repeat and eat

Example

If either of the first two arguments passed to this function is NULL, this function returns NULL. Here, we are passing NULL to the string parameter.

SELECT REGEXP_REPLACE(NULL, 'value', 'test') As Result;

Following is the output −

Result
NULL

If we pass NULL to the pattern parameter, it returns NULL as output.

SELECT REGEXP_REPLACE('Welcome to Tutorialspoint', NULL, 'sample')
As Result;

The output for the query above is produced as given below −

Result
NULL

If you pass empty string as the replacement string, this function returns NULL.

SELECT REGEXP_REPLACE('Welcome to Tutorialspoint', NULL, '')
As Result;

On executing the given query, the output is displayed as follows −

Result
NULL

Example

In another example, let us try to perform a search operation on a database table named CUSTOMERS using the REGEXP_REPLACE() function. First of all, let us create the table using the following query −

CREATE TABLE CUSTOMERS (
   ID INT AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

The following query inserts 7 records into the above created table −

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

Execute the following SELECT statement to display all the records of CUSTOMERS table −

Select * from CUSTOMERS;

Following is the CUSTOMERS table −

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

The following query uses the REGEXP_REPLACE() function to update the NAME column in the person_tbl table. It looks for names that start with the letter 'A' and replaces that 'A' with 'An'.

SELECT REGEXP_REPLACE(NAME, '^A', 'An') AS Result FROM CUSTOMERS;

On executing the given query, the output is displayed as follows −

Result
Ramesh
Khilan
Kaushik
Chaitali
Hardik
Komal
Muffy

But if the pattern is not found in any record of the table, the original values of the table are displayed by the function. Look at the following query −

SELECT REGEXP_REPLACE(ADDRESS, '^Z', 'P') AS RESULT FROM CUSTOMERS;

There is no record in ADDRESS column that starts with letter 'Z'. So, it returned the original records as output −

Result
Ahmedabad
Delhi
Kota
Mumbai
Bhopal
Hyderabad
Indore

The following query is using the REGEXP_REPLACE function to replace the second occurrence of the letter 'r' with 'R' in the ADDRESS column of the CUSTOMERS table −

SELECT REGEXP_REPLACE(ADDRESS, 'r', 'R', 2, 0, 'c') 
AS RESULT FROM CUSTOMERS;

As we can see in the output, the records 'Hyderabad' and 'Indore' has letter 'r' in it. And they are replaced by 'R' −

Result
Ahmedabad
Delhi
Kota
Mumbai
Bhopal
HydeRabad
IndoRe

REGEXP_REPLACE() Funcion Using a Client Program

We can also perform the MySQL REGEXP_REPLACE function using the client programs to find and replace occurrences of a string that match specific patterns.

Syntax

Following are the syntaxes of this operation in various programming languages −

To match with specific pattern and replace with another string using MySQL Query through PHP program, we need to execute the 'SELECT' statement using the mysqli function query() as follows −

$sql = "SELECT REGEXP_REPLACE('Welcome To Tutorialspoint!', 'Welcome', 'Welcom')";
$mysqli->query($sql);

To match with specific pattern and replace with another string using MySQL Query through Node.js program, we need to execute the 'SELECT' statement using the query() function of the mysql2 library as follows −

sql = "SELECT REGEXP_REPLACE('Welcome To Tutorialspoint!', 'Welcome', 'Welcom')";
con.query(sql);

To match with specific pattern and replace with another string using MySQL Query through Java program, we need to execute the 'SELECT' statement using the JDBC function executeUpdate() as follows −

String sql = "SELECT REGEXP_REPLACE('Welcome To Tutorialspoint!', 'Welcome', 'Welcom')";
statement.executeQuery(sql);

To match with specific pattern and replace with another string using MySQL Query through Python program, we need to execute the 'SELECT' statement using the execute() function of the MySQL Connector/Python as follows −

sql = "SELECT REGEXP_REPLACE('Welcome To Tutorialspoint!', 'Welcome', 'Welcom')" 
cursorObj.execute(sql)

Example

Following are the programs −

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$db = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $db);
if ($mysqli->connect_errno) {
    printf("Connect failed: %s
", $mysqli->connect_error); exit(); } //printf('Connected successfully.
'); $sql = "SELECT REGEXP_REPLACE('Welcome To Tutorialspoint!', 'Welcome', 'Welcom') AS RESULT"; if($result = $mysqli->query($sql)){ while($row = mysqli_fetch_array($result)){ printf("Result: %s", $row['RESULT']); } } if($mysqli->error){ printf("Error message: ", $mysqli->error); } $mysqli->close();

Output

The output obtained is as shown below −

Result: Welcom To Tutorialspoint!
var mysql = require('mysql2');
var con = mysql.createConnection({
host:"localhost",
user:"root",
password:"password"
});
 //Connecting to MySQL
 con.connect(function(err) {
 if (err) throw err;
  //console.log("Connected successfully...!");
  //console.log("--------------------------");
 sql = "USE TUTORIALS";
 con.query(sql);
 sql = "SELECT REGEXP_REPLACE('Welcome To Tutorialspoint!', 'Welcome', 'Welcom') AS RESULT";
 console.log("Select query executed successfully..!");
 console.log("Table records: ");
 con.query(sql);
 con.query(sql, function(err, result){
 if (err) throw err;
 console.log(result);
 });
});     

Output

The output obtained is as shown below −

Select query executed successfully..!
Table records:
[ { RESULT: 'Welcome To Tutorialspoint!' } ]    
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class regexp_replace {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/TUTORIALS";
        String user = "root";
        String password = "password";
        ResultSet rs;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            //System.out.println("Database connected successfully...!");
            String sql = "SELECT REGEXP_REPLACE('Welcome To Tutorialspoint!', 'Welcome', 'Welcom') AS RESULT";
            rs = st.executeQuery(sql);
            while(rs.next()) {
                String result = rs.getString("RESULT");
                System.out.println("Result: " + result);
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}    

Output

The output obtained is as shown below −

Result: Welcom To Tutorialspoint!
import mysql.connector
# Establishing the connection
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='tut'
)
# Creating a cursor object
cursorObj = connection.cursor()
regexp_replace_query = f"SELECT REGEXP_REPLACE('Welcome To Tutorialspoint!', 'Welcome', 'Welcom') AS RESULT;"
cursorObj.execute(regexp_replace_query)
# Fetching all the results
results = cursorObj.fetchall()
# Display the result
print("Result of REGEXP_REPLACE() Function:")
for row in results:
    result = row[0]
    print(f"The modified string is: '{result}'")
cursorObj.close()
connection.close()    

Output

The output obtained is as shown below −

Result of REGEXP_REPLACE() Function:
The modified string is: 'Welcom To Tutorialspoint!'
Advertisements