MySQL REGEXP පැහැදිලි කිරීම: උදාහරණ සමඟ සම්පූර්ණ මාර්ගෝපදේශය (MySQL 8.0 ක්‍රියාකාරකම් ඇතුළත්)

目次

1. හැඳින්වීම

MySQL නියමිත ප්‍රකාශන (REGEXP) යනු කුමක්ද?

MySQL නියමිත ප්‍රකාශන (regular expressions) යනු දත්ත ගබඩාව තුළ ස්ට්‍රින් සොයා ගැනීමට සහ සැකසීමට ඉතා බලවත් මෙවලම් වේ. ඒවා සාමාන්‍ය ස්ට්‍රින් සෙවීම් වලින් ලබාගත නොහැකි උසස් රටා ගැළපීම සක්‍රිය කරයි, ඔබට විශේෂිත ආකෘති හෝ කොන්දේසි වලට ගැළපෙන දත්ත ලබා ගැනීමට ඉඩ සලසයි.

උදාහරණයක් ලෙස, “විශේෂ අක්ෂරයක් සමඟ ආරම්භ වන නාමයන්” හෝ “අංකමය අගයන් පමණක් අඩංගු කේත” වැනි දත්ත පහසුවෙන් ලබා ගත හැක. මෙම කාර්යය දත්ත පිරිසිදු කිරීම සහ සංකීර්ණ සෙවීම් කොන්දේසි හසුරවීමට විශේෂයෙන් ප්‍රයෝජනවත් වේ.

MySQL හි නියමිත ප්‍රකාශන භාවිතයේ ප්‍රතිලාභ

  1. සංකීර්ණ සෙවීම් කොන්දේසි සඳහා සහය
  • සාමාන්‍ය LIKE මෙහෙයුමෙන් කළ නොහැකි සංකීර්ණ ස්ට්‍රින් රටා ඔබට නියමිත ප්‍රකාශන මඟින් නියම කළ හැක.
  1. දත්ත කණ්ඩායම් ග්‍රහණය සහ ප්‍රතිස්ථාපනය
  • උදාහරණයක් ලෙස, විශේෂිත ආකෘතියකට ගැළපෙන දත්ත පමණක් ග්‍රහණය කර හෝ ස්ට්‍රින් එකක කොටස ප්‍රතිස්ථාපනය කළ හැක.
  1. MySQL 8.0 සහ පසුගිය සංස්කරණවල වැඩිදියුණු ලක්ෂණ
  • REGEXP_LIKE සහ REGEXP_SUBSTR වැනි නව ක්‍රියාකාරකම් එකතු කර ඇති අතර, ඒවා මඟින් වැඩි ස flexibilty ලබා දේ.

මෙම ලිපියේ අරමුණ

මෙම ලිපිය MySQL නියමිත ප්‍රකාශන (REGEXP) මූලික භාවිතය සිට උසස් උදාහරණ සහ වැදගත් සැලකිලි දක්වා සියල්ල පැහැදිලි කරයි. ඔබ අරඹන්නා වුවත් හෝ අර්ධ‑වෘත්තීය වුවත්, වාස්තුකලාවට ගැළපෙන ප්‍රායෝගික අවබෝධයන් ඔබට ලැබෙනු ඇත.

ඊළඟ කොටසෙහි, MySQL හි නියමිත ප්‍රකාශන මූලික කරුණු පැහැදිලි කරනු ඇත.

2. MySQL හි නියමිත ප්‍රකාශන මූලික කරුණු

REGEXP මෙහෙයුම කුමක්ද?

MySQL හි REGEXP මෙහෙයුම නියමිත ප්‍රකාශන සමඟ වැඩ කිරීමට භාවිතා වේ. මෙම මෙහෙයුම අගයක් නියමිත රටාවකට ගැළපේදැයි තීරණය කරයි. අමතරව, RLIKE යනු REGEXP සඳහා අන්‍ය නාමයක් ලෙස ක්‍රියා කරයි.

පහත උදාහරණය “abc” රටාවට ස්ට්‍රින් එකක් ගැළපේදැයි පරීක්ෂා කරයි.

SELECT * FROM users WHERE name REGEXP 'abc';

REGEXP මෙහෙයුමේ මූලික ව්‍යවස්ථාව

නියමිත ප්‍රකාශන භාවිතයෙන් සෙවීමට මූලික ව්‍යවස්ථාව පහත පරිදි වේ:

SELECT * FROM table_name WHERE column_name REGEXP 'pattern';

සාමාන්‍ය REGEXP රටා ලැයිස්තුව

SymbolDescriptionExample
^Matches the beginning of a line^abc → Strings that start with “abc”
$Matches the end of a lineabc$ → Strings that end with “abc”
.Matches any single charactera.c → Matches “abc”, “adc”, etc.
|OR (matches either pattern)abc|xyz → Matches “abc” or “xyz”
[]Matches any one of the specified characters[abc] → Matches “a”, “b”, or “c”
*Matches zero or more repetitionsab*c → Matches “ac”, “abc”, “abbc”, etc.

REGEXP සහ LIKE අතර වෙනස

FeatureLIKEREGEXP
FlexibilitySupports only wildcards (% and _)Supports advanced pattern matching
PerformanceFastMay be slightly slower for complex patterns

ප්‍රායෝගික උදාහරණ: REGEXP සමඟ සෙවීම

උදාහරණ 1: වලංගු ඊමේල් ආකෘතිය සෙවීම

SELECT * FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

උදාහරණ 2: අංක පමණක් අඩංගු ක්ෂේත්‍ර සෙවීම

SELECT * FROM orders WHERE order_id REGEXP '^[0-9]+$';

සාරාංශ

මෙම කොටසේ, MySQL හි REGEXP මෙහෙයුමේ මූලික භාවිතය සහ රටා පිළිබඳව සාකච්ඡා කළෙමු. එය සරල සෙවීම් සිට උසස් රටා ගැළපීම දක්වා, සවිස්තරාත්මක දත්ත මෙහෙයුම් සඳහා ඔබට හැකියාව ලබා දෙයි.

3. MySQL 8.0 හි එකතු කරන ලද නියමිත ප්‍රකාශන ක්‍රියාකාරකම්

REGEXP_LIKE() – නියමිත ප්‍රකාශනයක් භාවිතා කර ගැළපීම පරීක්ෂා කිරීම

REGEXP_LIKE(string, pattern [, flags])

උදාහරණ:

SELECT REGEXP_LIKE('abcdef', 'abc');

ප්‍රතිඵලය: 1 (ගැළපේ)

REGEXP_INSTR() – ගැළපීමේ ස්ථානය සොයා ගැනීම

REGEXP_INSTR(string, pattern [, start_position, occurrence, flags, return_type])

උදාහරණ:

SELECT REGEXP_INSTR('abcdef', 'cd');

ප්‍රතිඵලය: 3

REGEXP_SUBSTR() – ගැළපෙන උපස්ට්‍රින් ලබා ගැනීම

REGEXP_SUBSTR(string, pattern [, start_position, occurrence, flags])

උදාහරණ:

SELECT REGEXP_SUBSTR('abc123def', '[0-9]+');

ප්‍රතිඵලය: 123

REGEXP_REPLACE() – නියමිත ප්‍රකාශනයක් භාවිතා කර ප්‍රතිස්ථාපනය කිරීම

REGEXP_REPLACE(string, pattern, replacement [, start_position, occurrence, flags])

උදාහරණ:

SELECT REGEXP_REPLACE('Item123Price456', '[0-9]', '#');

ප්‍රතිඵලය: Item###Price###

සාරාංශ

MySQL 8.0 හි එකතු කරන ලද නියමිත ප්‍රකාශන ක්‍රියාකාරකම් විස්තරාත්මක හා සවිස්තරාත්මක ස්ට්‍රින් මෙහෙයුම් සක්‍රිය කරයි. ඒවා ප්‍රයෝජනවත් ලෙස භාවිතා කිරීමෙන්, ඔබට දත්ත ග්‍රහණය සහ පරිවර්තනය වැඩි කාර්යක්ෂමතාවෙන් සිදු කළ හැක.

4. නියමිත ප්‍රකාශන සඳහා ප්‍රායෝගික භාවිත කේස්​වල​ය​්​)

විශේෂිත රටා සමඟ ගැලපෙන දත්ත සෙවීම

උදාහරණය 1: ඊ-මේල් ලිපින ආකෘතිය හඳුනා ගැනීම

SELECT * FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

උදාහරණය 2: දුරකථන අංක ආකෘතිය හඳුනා ගැනීම

SELECT * FROM contacts WHERE phone REGEXP '^[0-9]{3}-[0-9]{4}-[0-9]{4}$';

උපස්තර ඉවත් කිරීම

උදාහරණය 1: සංඛ්‍යාත්මක කොටස ඉවත් කිරීම

SELECT REGEXP_SUBSTR('abc123def456', '[0-9]+');

ප්‍රතිඵලය: 123

දත්ත ප්‍රතිස්ථාපනය

උදාහරණය 1: සංඛ්‍යා “#” සමඟ ප්‍රතිස්ථාපනය

SELECT REGEXP_REPLACE('Item123Price456', '[0-9]', '#');

ප්‍රතිඵලය: Item###Price###

දත්ත වලංගු කිරීම සහ පිරිසිදු කිරීම

උදාහරණය 1: අවලංගු ඊ-මේල් ලිපින හඳුනා ගැනීම

SELECT * FROM users WHERE email NOT REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

සාරාංශය

මෙම උදාහරණ මඟින්, ඔබට සෙවීම, ඉවත් කිරීම, ප්‍රතිස්ථාපනය සහ දත්ත වලංගු කිරීම වැනි කාර්යයන් කාර්යක්ෂමව කළ හැක.

5. වැදගත් සැලකිලි සහ හොඳ පුරුදු

බහුබයිට් අක්ෂර (පූර්ණ-පළල අක්ෂර) සැකසීම

MySQL නියමිත රෙගුලාර් ප්‍රකාශන පෙරනිමියෙන් බයිට් මට්ටමින් ඇගයෙයි, එබැවින් ජපන් අක්ෂර වැනි බහුබයිට් අක්ෂර සැකසීමේදී විශේෂ අවධානයක් අවශ්‍ය වේ.

විසඳුම:

ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

කාර්ය සාධනයට බලපෑම

ගැටළුව: රෙගුලාර් ප්‍රකාශන සංකීර්ණ සැකසීමක් නිසා, විශාල දත්ත කට්ටල සෙවීමේදී කාර්ය සාධනය අඩුවිය හැක.
විසඳුම:

SELECT * FROM users WHERE email LIKE '%@example.com' AND email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

ReDoS (රෙගුලාර් ප්‍රකාශන සේවා ප්‍රතික්ෂේප) වලින් ආරක්ෂාව

ගැටළුව: දුෂ්කර රටා අධික පද්ධති භාරයක් ඇති කරනු ඇත.
විසඳුම:

  1. හැකි තරම් සරල රටා භාවිතා කරන්න.
  2. ආදාන වලංගු කිරීම ශක්තිමත් කරන්න.
  3. විමසුම් ක්‍රියාත්මක කාලය නිරීක්ෂණය කරන්න.

අනුවාද අනුකූලතාව පරීක්ෂා කිරීම

MySQL 8.0 ට පෙර අනුවාදවල නව රෙගුලාර් ප්‍රකාශන ක්‍රියාකාරකම් නොමැත. ක්‍රියාත්මක කිරීමට පෙර ඔබේ පරිසර අනුවාදය සත්‍යාපනය කරන්න.

පරිසරයක පරීක්ෂා කිරීම

විමසුම් හැසිරීම සහ කාර්ය සාධනය පෙර පරීක්ෂා කරන්න, අතිරේක අවස්ථා සහ අවලංගු අගයන් කෙසේ හසුරවන්නේද යන්න ඇතුළත් කර.

සාරාංශය

කාර්ය සාධනය සහ ආරක්ෂාව දෙකම සැලකිල්ලට ගනිමින් රෙගුලාර් ප්‍රකාශන ආරක්ෂිතව සහ කාර්යක්ෂමව භාවිතා කිරීමට මෙම හොඳ පුරුදු මතක තබා ගන්න.

6. නිගමනය

ප්‍රධාන ග්‍රහණයන්

  1. මූලික මෙහෙයුම් සහ රෙගුලාර් ප්‍රකාශන රටා ඉගෙන ගැනීමෙන්, සරල සෙවීම් සිට සංකීර්ණ දත්ත ඉවත් කිරීම දක්වා සියල්ල කළ හැක.
  2. MySQL 8.0 හි හඳුන්වා දී ඇති රෙගුලාර් ප්‍රකාශන ක්‍රියාකාරකම් තවත් වඩාත් සවිස්තරාත්මක මෙහෙයුම් සලසයි.
  3. ප්‍රායෝගික උදාහරණ භාවිතයෙන්, සැබෑ ලෝක දත්ත සැකසීමේ කාර්යක්ෂමතාව වැඩිවේ.
  4. හොඳ පුරුදු අනුගමනය කිරීමෙන්, ආරක්ෂිත සහ ඉහළ කාර්ය සාධන විමසුම් ලබා ගත හැක.

MySQL රෙගුලාර් ප්‍රකාශන භාවිතයේ ප්‍රතිලාභ

  • උසස් සෙවීම් හැකියාවන්: සරල අක්ෂර සෙවීම් වලින් අමාරු වන කොන්දේසි පහසුවෙන් නිර්වචනය කළ හැක.
  • දත්ත සැකසීමේ කාර්යක්ෂමතාව වැඩිදියුණු කිරීම: ඉවත් කිරීම, ප්‍රතිස්ථාපනය සහ වලංගු කිරීම SQL තුළම සම්පූර්ණ කළ හැක.
  • විශාල පරිසරය: දත්ත පිරිසිදු කිරීම සිට ලොග් විශ්ලේෂණය දක්වා සියල්ලට ප්‍රයෝජනවත්.

ඉගෙනීම සහ අයදුම් කිරීම දිගටම කර ගැනීම

  1. සත්‍ය දත්ත කට්ටල භාවිතයෙන් විමසුම් පුහුණු කර ඔබේ අවබෝධය ගැඹුරු කරන්න.
  2. නවතම අනුවාද විශේෂාංග සක්‍රියව භාවිතා කර කාර්ය සාධනය උපරිම කරන්න.
  3. ආරක්ෂාව සහ වේගය රැක ගැනීමට ඔබේ විමසුම් නිතර සමාලෝචනය කරන්න.

අවසාන අදහස්

MySQL රෙගුලාර් ප්‍රකාශන පාලනයෙන්, ඔබට මෙහෙයුම් කාර්යක්ෂමතාව වැඩිදියුණු කර දත්ත විශ්ලේෂණ හැකියාවන් වර්ධනය කළ හැක.

7. නිතර අසන ප්‍රශ්න (FAQ)

ප්‍ර.1. MySQL හි REGEXP සහ LIKE අතර වෙනස කුමක්ද?

ප. REGEXP උසස් රටා ගැලපීම සපයන අතර, LIKE ප්‍රධාන වශයෙන් අංශික අක්ෂර ගැලපීම සඳහා භාවිතා වේ.

SELECT * FROM users WHERE email LIKE '%example.com';
SELECT * FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

Q2. කාර්ය සාධනය වැඩිදියුණු කිරීම කෙසේද?

A.

  1. පෙරදැන් ෆිල්ටර් කොන්දේසි යොදන්න.
  2. දර්ශක (indexes) ප්‍රභාවී ලෙස භාවිතා කරන්න.
  3. විමසුම් (queries) සරල හා සුදුසු ලෙස තබන්න.

Q3. බහුබයිට් අක්ෂර හසුරවන්නේ කෙසේද?

A. UTF-8 සහය සකසන්න.

ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Q4. නියමිත ප්‍රකාශන (regular expressions) භාවිතයෙන් ප්‍රතිස්ථාපනයේ උදාහරණයක් පෙන්වන්න පුළුවන්ද?

A. අංකයන් “#” සමඟ ප්‍රතිස්ථාපනය කරන්න.

SELECT REGEXP_REPLACE('Item123Price456', '[0-9]', '#');

Q5. දිනයේ ආකෘතිය පරිවර්තනය කිරීම සඳහා විමසුම කුමක්ද?

A. “YYYY/MM/DD” → “YYYY-MM-DD” ලෙස වෙනස් කරන්න.

SELECT REGEXP_REPLACE('2023/12/20', '/', '-');

Q6. REGEXP භාවිතයෙන් බහු කොන්දේසි කෙසේ නියම කරගත හැකිද?

A. පයිප් (|) සංකේතය භාවිතා කරන්න.

SELECT * FROM products WHERE name REGEXP 'phone|tablet';

සාරාංශය

FAQ කොටස සාමාන්‍ය ප්‍රශ්නවලට පිළිතුරු ලබා දී, ප්‍රායෝගික විමසුම් උදාහරණ ලබා දී ඇත.