当前位置:网站首页>MySQL regexp: Regular Expression Query

MySQL regexp: Regular Expression Query

2022-07-05 01:26:00 Know its black and accept its white

This paper

MySQL Formal expressions in are often used to retrieve or replace text content that conforms to a pattern , Match the special string that meets the requirements in the text according to the specified matching pattern .

for example , Extract the phone number from a file , Find the repeated words in an article or replace the sensitive vocabulary entered by the user , Regular expressions can be used in these places .

Regular expressions are powerful and flexible , Commonly used for complex queries .

REGEXP Matching lists commonly used in operators

MySQL Use in REGEXP Keyword specifies the character matching pattern of the regular expression , The following table lists them REGEXP Matching lists commonly used in operators .

Options explain Example Examples of matching values
^ Match the start character of the text '^b' Match with letters b start String book、big、banana、 bike
$ Match the end character of the text 'st$’ Match with st Ending word Fu string test、resist、persist
. Match any single character 'b.t’ Match any  b and t There is a character between bit、bat、but、bite
* Match zero or more words in front of it operator 'f*n’ Matching character n There is Arbitrary characters f fn、fan、faan、abcn
+ Match preceding characters 1 Times or times 'ba+’ Match with b start , after At least one face follows a ba、bay、bare、battle
< character string > Matches text containing the specified character 'fa’ fan、afa、faad
[ Character set ] Match any word in the character set operator '[xz]' matching x perhaps z dizzy、zebra、x-ray、 extra
[^] Match any characters that are not in brackets '[^abc]’ Match any non package contain a、b or c String desk、fox、f8ke
character string {n,} Match the previous string at least n Time b{2}  matching 2 One or more Of b bbb、 bbbb、 bbbbbbb
character string
{n,m}
Match the previous string at least n Time , at most m Time b{2,4}  Match the least 2 individual , most 4 individual b bbb、 bbbb

Query records starting with a specific character or string

character "^" Matches text that begins with a specific character or string .

【 example 1】

stay tb_departments In the table , Inquire about dept_name Fields are represented by letters “C” The first record , Input SQL The statement and execution results are as follows .

mysql> SELECT * FROM tb_departments
    -> WHERE dept_name REGEXP '^C';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       1 | Computer  | 11111     | A         |
|       3 | Chinese   | 33333     | B         |
+---------+-----------+-----------+-----------+
2 rows in set (0.05 sec)

stay tb_departments There are two records in the table dept_name Field values are in letters C At the beginning , The returned results are 2 Bar record .

【 example 2】

stay tb_departments In the table , Inquire about dept_name Field to “Ch” The first record , Input SQL The statement and execution results are as follows .

mysql> SELECT * FROM tb_departments
    -> WHERE dept_name REGEXP '^Ch';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       3 | Chinese   | 33333     | B         |
+---------+-----------+-----------+-----------+
1 row in set (0.03 sec)

Only Chinese In order to “Ch” At the beginning , Therefore, only 1 Bar record .

Query records ending with a specific character or string

character “$” Matches text that ends with a specific character or string .

【 example 3】

stay tb_departments In the table , Inquire about dept_name Fields are represented by letters “y” The record at the end , Input SQL The statement and execution results are as follows .

mysql> SELECT * FROM tb_departments
    -> WHERE dept_name REGEXP 'y$';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       4 | Economy   | 44444     | B         |
|       5 | History   | 55555     | B         |
+---------+-----------+-----------+-----------+
2 rows in set (0.00 sec)

stay tb_departments There are two records in the table dept_name Field values are in letters y At the end of the , The returned results are 2 Bar record .

【 example 4】

stay tb_departments In the table , Inquire about dept_name Field to “my” The record at the end , Input SQL The statement and execution results are as follows .

mysql> SELECT * FROM tb_departments
    -> WHERE dept_name REGEXP 'my$';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       4 | Economy   | 44444     | B         |
+---------+-----------+-----------+-----------+
1 row in set (0.00 sec)

Only Economy In order to “my” At the end of the , Therefore, only 1 Bar record .

Use symbols “.” Replace any character in the string

【 example 5】

stay tb_departments In the table , Inquire about dept_name The field value contains the letters “o” And letters “y”, And there is only one letter between two letters , Input SQL The statement and execution results are as follows .

mysql> SELECT * FROM tb_departments
    -> WHERE dept_name REGEXP 'o.y';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       4 | Economy   | 44444     | B         |
|       5 | History   | 55555     | B         |
+---------+-----------+-----------+-----------+
2 rows in set (0.00 sec)

In the query statement “o.y” Specify that there should be letters in the matching characters o and y, And there is a single character between the two letters , There is no limit to the position of the matching character and the total length of the query string , therefore Economy and History All meet the matching conditions .

Use “*” and “+” To match multiple characters

asterisk “*” Match the preceding character any number of times , Include 0 Time . plus “+” Match the preceding character at least once .

【 example 6】

stay tb_departments In the table , Inquire about dept_name The field value contains the letters “C”, And “C” The letters appear after them “h” The record of , Input SQL The statement and execution results are as follows .

mysql> SELECT * FROM tb_departments
    -> WHERE dept_name REGEXP '^Ch*';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       1 | Computer  | 11111     | A         |
|       3 | Chinese   | 33333     | B         |
+---------+-----------+-----------+-----------+
2 rows in set (0.00 sec)

asterisk “*” Can match any number of characters ,Computer Middle letter C There is no letter after it h, But it also meets the matching conditions .

【 example 7】

stay tb_departments In the table , Inquire about dept_name The field value contains the letters “C”, And “C” The letters appear after them “h” At least one record , Input SQL The statement and execution results are as follows .

mysql> SELECT * FROM tb_departments
    -> WHERE dept_name REGEXP '^Ch+';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       3 | Chinese   | 33333     | B         |
+---------+-----------+-----------+-----------+
1 row in set (0.00 sec)

“h+” Match the letter “h” At least once , Only Chinese Meet the matching conditions .

Matches the specified string

A regular expression can match a specified string , As long as this string is in the query text , To match multiple strings , Then a separator is used between multiple strings “|” separate .

【 example 8】

stay tb_departments In the table , Inquire about dept_name The field value contains a string “in” The record of , Input SQL The statement and execution results are as follows .

mysql> SELECT * FROM tb_departments
    -> WHERE dept_name REGEXP 'in';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       3 | Chinese   | 33333     | B         |
+---------+-----------+-----------+-----------+
1 row in set (0.00 sec)

You can see ,dept_name Field Chinese Contains the string “in”, Meet the matching conditions .

【 example 9】

stay tb_departments In the table , Inquire about dept_name The field value contains a string “in” perhaps “on” The record of , Input SQL The statement and execution results are as follows .

mysql> SELECT * FROM tb_departments
    -> WHERE dept_name REGEXP 'in|on';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       3 | Chinese   | 33333     | B         |
|       4 | Economy   | 44444     | B         |
+---------+-----------+-----------+-----------+
2 rows in set (0.00 sec)

You can see ,dept_name Field Chinese Contains the string “in”,Economy Contains the string “on”, Meet the matching conditions .

Tips :LIKE Operator can also match the specified string , But with REGEXP Different ,LIKE If the matching string appears in the middle of the text , Can't find it , The corresponding line will not return . and REGEXP Match within text , If the matched string appears in the text ,REGEXP It will be found , The corresponding line will also be returned .

Match any one of the specified strings

square brackets “[]” Specify a character set , Match only any of these characters , This is the text you are looking for .

【 example 10】

stay tb_departments In the table , Inquire about dept_name The field value contains the letters “o” perhaps “e” The record of , Input SQL The statement and execution results are as follows .

mysql> SELECT * FROM tb_departments
    -> WHERE dept_name REGEXP '[io]';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       1 | Computer  | 11111     | A         |
|       3 | Chinese   | 33333     | B         |
|       4 | Economy   | 44444     | B         |
|       5 | History   | 55555     | B         |
+---------+-----------+-----------+-----------+
4 rows in set (0.00 sec)

You can see from the query results that , Of all returned records dept_name The value of the field contains letters o perhaps e, Or both .

square brackets “[]” You can also specify a set of values .

【 example 11】

stay tb_departments In the table , Inquire about dept_call The field value contains 1、2 perhaps 3 The record of , Input SQL The statement and execution results are as follows .

mysql> SELECT * FROM tb_departments
    -> WHERE dept_call REGEXP '[123]';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       1 | Computer  | 11111     | A         |
|       2 | Math      | 22222     | A         |
|       3 | Chinese   | 33333     | B         |
+---------+-----------+-----------+-----------+
3 rows in set (0.00 sec)

In the query results ,dept_call There is 1、2、3 One of the three numbers is the matching record field .

Match set “[123]” Or you could write it as “[1-3]”, That is, specify the set interval . for example ,“[a-z]” Indicates that the set interval is a~z The letter of ,“[0-9]” Indicates that the set interval is all numbers .

Matches characters other than the specified characters

“[^ Character set ]” Matches any character that is not in the specified set .

【 example 12】

stay tb_departments In the table , Inquire about dept_name The field value contains the letters a~t Records of characters other than , Input SQL The statement and execution results are as follows .

mysql> SELECT * FROM tb_departments
    -> WHERE dept_name REGEXP '[^a-t]';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       1 | Computer  | 11111     | A         |
|       4 | Economy   | 44444     | B         |
|       5 | History   | 55555     | B         |
+---------+-----------+-----------+-----------+
3 rows in set (0.00 sec)

Returns... In the record dept_name The field value contains values other than the specified letters and numbers , Such as u、y etc. , These letters are not in a~t in , Meet the matching conditions .

Application example 1

Scenario introduction :

Precise query question_id contain 2 Of Record

 Insert picture description here
Use regular

SELECT * FROM yexam_exam where question_ids REGEXP '(^|,)2(,|$)';

Query results :
 Insert picture description here

原网站

版权声明
本文为[Know its black and accept its white]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/186/202207050115001104.html