Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ตัวดำเนินการ MySQL REGEXP คืออะไรและจัดการกับการจับคู่รูปแบบอย่างไร


MySQL รองรับการดำเนินการจับคู่รูปแบบอื่นตามนิพจน์ทั่วไปและ REGEXP โอเปอเรเตอร์ ต่อไปนี้เป็นตารางรูปแบบ ซึ่งสามารถใช้ร่วมกับ REGEXP โอเปอเรเตอร์เพื่อจัดการการจับคู่รูปแบบ

รูปแบบ
รูปแบบตรงกันอย่างไร

^
จุดเริ่มต้นของสตริง
$
จุดสิ้นสุดของสตริง
.
อักขระตัวใดก็ได้
[...]
อักขระใดๆ ที่อยู่ระหว่างวงเล็บเหลี่ยม
[^...]
อักขระใดๆ ที่ไม่อยู่ในวงเล็บเหลี่ยม
p1|p2|p3
การสลับ; ตรงกับรูปแบบใด ๆ p1, p2 หรือ p3
*
องค์ประกอบก่อนหน้า 0 หรือมากกว่า
+
องค์ประกอบก่อนหน้าอย่างน้อยหนึ่งอินสแตนซ์
{n}
n อินสแตนซ์ขององค์ประกอบก่อนหน้า
{m,n} ม. ถึง n อินสแตนซ์ขององค์ประกอบก่อนหน้า


ตัวอย่าง

เพื่อแสดงการใช้ REGEXP เรากำลังใช้ตาราง 'Student_info' ซึ่งมีข้อมูลดังต่อไปนี้ -

mysql> Select * from Student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
|  101 | YashPal | Amritsar   | History    |
|  105 | Gaurav  | Chandigarh | Literature |
|  130 | Ram     | Jhansi     | Computers  |
|  132 | Shyam   | Chandigarh | Economics  |
|  133 | Mohan   | Delhi      | Computers  |
+------+---------+------------+------------+
5 rows in set (0.00 sec)

ต่อไปนี้คือข้อความค้นหาที่ใช้ REGEXP เพื่อค้นหารูปแบบของ 'ชื่อ' จากตารางด้านบน -

mysql> Select Name from student_info WHERE Name REGEXP '^Y';
+---------+
| Name    |
+---------+
| YashPal |
+---------+
1 row in set (0.11 sec)

ข้อความค้นหาด้านบนจะค้นหาชื่อทั้งหมดที่ขึ้นต้นด้วย "Y"

mysql> Select name from student_info WHERE Name REGEXP 'am$';
+-------+
| name  |
+-------+
| Ram   |
| Shyam |
+-------+
2 rows in set (0.00 sec)

แบบสอบถามด้านบนจะค้นหาชื่อทั้งหมดที่ลงท้ายด้วย 'am'

mysql> Select name from student_info WHERE Name REGEXP 'av';
+--------+
| name   |
+--------+
| Gaurav |
+--------+
1 row in set (0.00 sec)

แบบสอบถามด้านบนจะค้นหาชื่อทั้งหมดที่มี 'av'

mysql> Select name from student_info WHERE Name REGEXP '^[aeiou]|am$';
+-------+
| name  |
+-------+
| Ram   |
| Shyam |
+-------+
2 rows in set (0.00 sec)

ข้อความค้นหาด้านบนจะค้นหาชื่อทั้งหมดที่ขึ้นต้นด้วยสระและลงท้ายด้วย "am"