MySQL නිති ප්‍රකාශන (REGEXP) මාර්ගෝපදේශය: ව්‍යවස්ථාව, MySQL 8 ක්‍රියාකාරකම්, උදාහරණ, සහ හොඳම පුරුදු

目次

1. හැඳින්වීම

MySQL හි නියමිත ප්‍රකාශන (Regular Expressions) භාවිතය

MySQL යනු දත්ත සොයා ගැනීම සහ සැකසීම සඳහා ශක්තිමත් දත්ත ගබඩා කළමනාකරණ පද්ධතියක් වන අතර, නියමිත ප්‍රකාශන (REGEXP) භාවිතයෙන් වඩාත් සවිස්තරාත්මක සෙවීම් සිදු කිරීමට සහාය දක්වයි. නියමිත ප්‍රකාශන භාවිතා කිරීමෙන්, ඔබට විශේෂිත රටා සමඟ ගැලපෙන දත්ත කාර්යක්ෂමව ලබා ගත හැකි අතර, දත්ත ආකෘතිකරණය හෝ වලංගුකරණයද සිදු කළ හැකිය.

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

MySQL නියමිත ප්‍රකාශන භාවිතා කිරීමෙන් පහත වැනි ප්‍රතිලාභ ලැබේ:

  • උසස් සෙවීම් : විශේෂිත අක්ෂර මාලා හෝ රටා අඩංගු දත්ත පහසුවෙන් ලබා ගත හැකිය.
  • දත්ත අඛණ්ඩතාව පරීක්ෂා කිරීම : ඇතුළත් කිරීමේ වලංගුකරණය (උදා. ඊමේල් ලිපින ආකෘති වලංගුකරණය) සඳහා ප්‍රයෝජනවත් වේ.
  • LIKE මෙහෙයුමට වඩා ශක්තිමත් : LIKE මෙහෙයුම වැනි වයිල්ඩ්කාඩ් (% සහ _) භාවිතා කරන අතර, REGEXP ඔබට සංකීර්ණ සෙවීම් කොන්දේසි වඩා සවිස්තරාත්මකව නිර්වචනය කිරීමට ඉඩ සලසයි.

මෙම ලිපියේ අරමුණ සහ ව්‍යුහය

මෙම ලිපිය MySQL හි නියමිත ප්‍රකාශන මූලික කරුණු සිට උසස් භාවිතය, කාර්ය සාධන අභිප්‍රේරණය, සහ MySQL 8.0 සහ ඊට පසු නිකුත් කරන ලද නව නියමිත ප්‍රකාශන ක්‍රියාකාරකම් දක්වා සියල්ල පැහැදිලි කරයි. ප්‍රායෝගික උදාහරණ සමඟ, අරම්භකයන්ටත් පහසුවෙන් අවබෝධ කරගත හැකි ලෙස අන්තර්ගතය සැලසුම් කර ඇත.

ලිපියේ ව්‍යුහය:

  1. MySQL නියමිත ප්‍රකාශන මූලික කරුණු සහ ව්‍යවස්ථා
  2. MySQL 8.0 සහ ඊට පසු එකතු කරන ලද නියමිත ප්‍රකාශන ක්‍රියාකාරකම්
  3. ප්‍රායෝගික උදාහරණ (වලංගුකරණය, දත්ත ලබා ගැනීම, ආකෘති පරිවර්තනය)
  4. නියමිත ප්‍රකාශන භාවිතයේ වැදගත් සැලකිලි (කාර්ය සාධනය, ආරක්ෂාව)
  5. FAQ (නිතර අසන ප්‍රශ්න)
  6. සාරාංශය

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

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

MySQL හි, ඔබ REGEXP මෙහෙයුම (හෝ RLIKE) භාවිතා කර නියමිත ප්‍රකාශන සමඟ වැඩ කරයි. LIKE මෙහෙයුමට සමානව, එය තීරණය කිරීම සඳහා භාවිතා වේ කෝලමයක් නියමිත රෙගෙක්ස් රටාවකට ගැලපේද යන්න.

මූලික ව්‍යවස්ථා

SELECT * FROM table_name WHERE column_name REGEXP 'regex_pattern';

හෝ

SELECT * FROM table_name WHERE column_name RLIKE 'regex_pattern';

RLIKE යනු REGEXP සඳහා වෙනත් නාමයක් වන අතර, දෙකම එකම ආකාරයෙන් ක්‍රියා කරයි.

උදාහරණ
උදාහරණයක් ලෙස, නාමය තුළ “山” අක්ෂරය අඩංගු වාර්තා සෙවීමට:

SELECT * FROM users WHERE name REGEXP '山';

නියමිත ප්‍රකාශන මූලික රටා

MySQL නියමිත ප්‍රකාශන වල, ඔබට පහත පරිදි රටා භාවිතා කළ හැකිය.

SymbolMeaningExampleResult
.Any single charactera.cMatches “abc”, “aac”, “adc”
^Start of the string^abcMatches “abcde” but not “dabc”
$End of the stringxyz$Matches “axyz” but not “xyzb”
[]Any one of the specified characters[abc]Matches “a”, “b”, or “c”
[^]Any character not in the specified set[^abc]Matches any character except “a”, “b”, or “c”
*Repeat the preceding character 0 or more timesa*Matches “”, “a”, “aa”, “aaa”, etc.
+Repeat the preceding character 1 or more timesa+Matches “a”, “aa”, “aaa”, etc. (does not match the empty string)
{n}Repeat the preceding character exactly n timesa{3}Matches “aaa”
{n,}Repeat the preceding character at least n timesa{2,}Matches “aa”, “aaa”, “aaaa”, etc.
{n,m}Repeat the preceding character between n and m timesa{2,4}Matches “aa”, “aaa”, “aaaa”

LIKE මෙහෙයුම සමඟ වෙනස්කම්

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

උදාහරණ 1: LIKE මෙහෙයුම භාවිතා කිරීම

SELECT * FROM users WHERE name LIKE '%山%';
  • LIKE සමඟ, ඔබට අඩංගු දත්ත සෙවිය හැකි නමුත්, සරල වයිල්ඩ්කාඩ් (% සහ _) පමණක් භාවිතා කළ හැකිය.

උදාහරණ 2: REGEXP මෙහෙයුම භාවිතා කිරීම

SELECT * FROM users WHERE name REGEXP '^山';
  • REGEXP සමඟ, නාමය සමඟ ආරම්භ වන දත්ත පමණක් ලබා ගත හැකිය.

බහු රටා නිරූපණය කිරීමේ ආකාරය

ඔබ | භාවිතා කර OR කොන්දේසිය සමඟ බහු රටා නිරූපණය කළ හැකිය.

උදාහරණ: අවසාන නාමය “佐藤” හෝ “田中” වන පරිශීලකයින් ලබා ගන්න

SELECT * FROM users WHERE name REGEXP '佐藤|田中';

නකරු (Negative) ගැලපීම

කොටුලක ඇතුළත ^ භාවිතා කළහොත්, “නිශ්චිත අක්ෂර අඩංගු නොවන” දත්ත ලබා ගත හැකිය.

උදාහරණ: “山” නොවන අක්ෂරයෙන් ආරම්භ වන දත්ත

SELECT * FROM users WHERE name REGEXP '^[^山]';

මෙම අවස්ථාවේ, නාමය සමඟ ආරම්භ නොවන වාර්තා පෙන්වයි.

සාරාංශ

  • MySQL හි, REGEXP යනු LIKE ට වඩා ශක්තිමත් රටා සෙවීම සක්‍රිය කරයි.
  • මූලික ව්‍යවස්ථා සහ රටා ( . , ^ , $ , [] , * , + , ආදිය) අවබෝධ කර ගැනීම මඟින් ලවච්ච සෙවීම් සිදු කළ හැක.
  • LIKE සමඟ ඇති වෙනස්කම් අවබෝධ කර ඒ අනුව භාවිතා කිරීම වැදගත් වේ.
  • | භාවිතා කිරීමෙන් බහු රටා සමඟ සෙවිය හැක.
  • නකලත් අක්ෂර පන්තිය [^ ] භාවිතා කිරීමෙන් නියමිත අක්ෂර වලින් ආරම්භ නොවන දත්ත සෙවිය හැක.

3. MySQL 8.0 සහ පසුගිය සංස්කරණවල එකතු කරන ලද නියම රෙගුලාසි ක්‍රියාකාරකම්

MySQL 8.0 හි, සාම්ප්‍රදායික REGEXP මෙහෙයුමට අමතරව, නව ක්‍රියාකාරකම් හතරක් එකතු කර ඇත, එමඟින් වඩා ලවච්ච නියම රෙගුලාසි සෙවීම් සිදු කළ හැක. මෙය ගැලපීම් ස්ථාන ලබා ගැනීම, උපස්තර ලබා ගැනීම, සහ ප්‍රතිස්ථාපන සිදු කිරීම සක්‍රිය කරයි, MySQL හි රෙගෙක්ස් සමඟ ඔබට කළ හැකි දේවල් විශාල ලෙස විස්තාර කරයි.

මෙම කොටසේ, අපි නව නියම රෙගුලාසි ක්‍රියාකාරකම් එක් එක් විස්තරාත්මකව පැහැදිලි කර, ප්‍රායෝගික උදාහරණ පෙන්වමු.

3.1 REGEXP_LIKE()

සාරාංශය

REGEXP_LIKE(), REGEXP මෙහෙයුම වැනි, තීරුවේ අගය නිර්දේශිත රෙගුලාසි රටාවකට ගැලපේදැයි පරීක්ෂා කරයි.

ව්‍යවස්ථාව

REGEXP_LIKE(column_name, 'regex_pattern' [, flags])
  • column_name : සෙවිය යුතු තීරුව
  • 'regex_pattern' : කොන්දේසිය ලෙස භාවිතා කරන රෙගුලාසි රටාව
  • flags (optional) : අකුරු සංවේදනය (case sensitivity) (case‑insensitive ගැලපීම සඳහා i භාවිතා කරන්න)

උදාහරණ

gmail.com හෝ yahoo.co.jp සමඟ අවසන් වන ඊමේල් ලිපිනයක් ඇති පරිශීලකයින් ලබා ගන්න”

SELECT * FROM users WHERE REGEXP_LIKE(email, '(@gmail\.com|@yahoo\.co\.jp)$');

“’admin’ අඩංගු පරිශීලක නාම සෙවීම (අකුරු සංවේදනය නොවන)”

SELECT * FROM users WHERE REGEXP_LIKE(username, 'admin', 'i');

REGEXP_LIKE() REGEXP මෙහෙයුමට සමාන කාර්යයක් කරයි, නමුත් එය වඩා ප්‍රමිතියට අනුකූල SQL‑හිතකාමී රීතියක් ලබා දෙයි.

3.2 REGEXP_INSTR()

සාරාංශය

REGEXP_INSTR() ස්ට්‍රින්ග් එක තුළ රෙගුලාසි ගැලපීම සිදුවන ස්ථානය (ආරම්භක අංකය) ලබා දෙයි.

ව්‍යවස්ථාව

REGEXP_INSTR(column_name, 'regex_pattern' [, start_position, occurrence, return_option, flags])
  • start_position (විකල්ප): සෙවීම ආරම්භ කරන ස්ථානය (පෙරනිමි: 1)
  • occurrence (විකල්ප): ලබා දිය යුතු ගැලපීමේ සංඛ්‍යාව (පෙරනිමි: 1)
  • return_option (විකල්ප): 0 (ආරම්භක ස්ථානය ලබා දෙයි) හෝ 1 (ගැලපීමේ අවසන් ස්ථානය ලබා දෙයි)
  • flags (විකල්ප): case‑insensitive ගැලපීම සඳහා i භාවිතා කරන්න

උදාහරණ

“දුරකථන අංකය 090 හෝ 080 සමඟ ආරම්භ වූ විට, ආරම්භක ස්ථානය ලබා ගන්න”

SELECT phone, REGEXP_INSTR(phone, '^(090|080)') AS match_pos FROM users;

“ඊමේල් ලිපිනයේ ඩොමේන් කොටසෙහි ආරම්භක ස්ථානය ලබා ගන්න”

SELECT email, REGEXP_INSTR(email, '@') AS domain_start FROM users;
  • එය @ ලකුණ සොයාගත් ස්ථානය ලබා දෙයි (උදාහරණයක් ලෙස, user@example.com හි 5 ලෙස 반환 වේ).

REGEXP_INSTR() සමඟ, ඔබට ස්ථාන තොරතුරු ලබා ගත හැකි අතර, ස්ට්‍රින්ග් සැකසීමේ විකල්පයන් පුළුල් කරයි.

3.3 REGEXP_SUBSTR()

සාරාංශය

REGEXP_SUBSTR() රෙගුලාසි රටාවකට ගැලපෙන උපස්තරය ස්ට්‍රින්ග් එකෙන් ලබා ගනී.

ව්‍යවස්ථාව

REGEXP_SUBSTR(column_name, 'regex_pattern' [, start_position, occurrence, flags])
  • occurrence (විකල්ප): n වැනි ගැලපීම ලබා ගන්න (පෙරනිමි: 1)
  • flags (විකල්ප): අකුරු සංවේදනය (i භාවිතා කර අකුරු සංවේදනය නොකරන්න)

උදාහරණ

“ඊමේල් ලිපිනයේ ඩොමේන් කොටස පමණක් ලබා ගන්න”

SELECT email, REGEXP_SUBSTR(email, '@[a-zA-Z0-9.-]+') AS domain FROM users;

“පණිවිඩයක පළමු අංක අනුක්‍රමය ලබා ගන්න”

SELECT message, REGEXP_SUBSTR(message, '[0-9]+') AS first_number FROM logs;

REGEXP_SUBSTR() සමඟ, ඔබට විශේෂ රටා ලබා ගනිමින් දත්ත සංවිධානය සහ පරිවර්තනය සඳහා භාවිතා කළ හැක.

3.4 REGEXP_REPLACE()

සාරාංශය

REGEXP_REPLACE() රෙගුලාසි රටාවකට ගැලපෙන උපස්තරයන් වෙනත් ස්ට්‍රින්ග් එකක් සමඟ ප්‍රතිස්ථාපනය කරයි.

ව්‍යවස්ථාව

REGEXP_REPLACE(column_name, 'regex_pattern', 'replacement' [, occurrence, flags])
  • replacement : ගැලපෙන කොටස ප්‍රතිස්ථාපනය කිරීමට භාවිතා කරන string
  • occurrence (විකල්ප): nth ගැලපීම පමණක් ප්‍රතිස්ථාපනය කරන්න (අවලංගු කර ඇත්නම්, සියලු ගැලපීම් ප්‍රතිස්ථාපනය වේ)
  • flags (විකල්ප): case‑insensitive ගැලපීම සඳහා i භාවිතා කරන්න

උදාහරණ

“දුරකථන අංක වලින් හයිෆන් (-) ඉවත් කරන්න”

SELECT phone, REGEXP_REPLACE(phone, '-', '') AS clean_phone FROM users;

“HTML ටැග් ඉවත් කරන්න”

SELECT comment, REGEXP_REPLACE(comment, '<[^>]+>', '') AS clean_text FROM reviews;

REGEXP_REPLACE() සමඟ, ආකෘති පරිවර්තනය සහ දත්ත පිරිසිදු කිරීම පහසු වේ.

3.5 සාරාංශය

FunctionPurposeExample
REGEXP_LIKE()Check whether a value matches a regex patternSELECT * FROM users WHERE REGEXP_LIKE(email, '@gmail\.com$');
REGEXP_INSTR()Get the start position of the matched substringSELECT REGEXP_INSTR(email, '@') FROM users;
REGEXP_SUBSTR()Extract the matched substringSELECT REGEXP_SUBSTR(email, '@[a-zA-Z0-9.-]+') FROM users;
REGEXP_REPLACE()Replace the matched substringSELECT REGEXP_REPLACE(phone, '-', '') FROM users;

4. MySQL නියමිත ප්‍රකාශන වල ප්‍රායෝගික උදාහරණ

MySQL නියමිත ප්‍රකාශන භාවිතා කිරීමෙන්, ඔබට දත්ත වලංගු කිරීම, විශේෂ දත්ත ලබා ගැනීම, සහ ආකෘති පරිවර්තනය වැනි වාස්තුක දත්ත සැකසීමේ කාර්යයන් සරල කළ හැක. මෙම කොටසේ, SQL කේත සහ විස්තර සමඟ ප්‍රායෝගික භාවිතා කේස් හඳුන්වා දෙමු.

4.1 ඊමේල් ලිපින වලංගු කිරීම

සමාලෝචනය

දත්ත ගබඩාවේ සුරැකි ඊමේල් ලිපින වලංගු ආකෘතියකට අනුකූලදැයි පරීක්ෂා කිරීමට නියමිත ප්‍රකාශන භාවිතා කරන්න.

භාවිතා කිරීමට SQL

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

විස්තර

  • ^[a-zA-Z0-9._%+-]+@ ට පෙර අක්ෂර‑අංක, බින්දු, අඩි රේඛා, හෝ පළමු ලකුණු එකක් හෝ වැඩි
  • @[a-zA-Z0-9.-]+@ පසු ඩොමේන් නාමයක්
  • \.[a-zA-Z]{2,}$ → අවම වශයෙන් අක්ෂර 2ක් ඇති TLD (ඉහළ‑මට්ටමේ ඩොමේන්) සමඟ අවසන් වේ (උදා: .com, .jp, .net)

මෙම විමසුම සමඟ, ඔබට වලංගු නොවන ඊමේල් ලිපින (උදා: user@@example.com, user@.com) ඉවත් කළ හැක.

4.2 ජපන් දුරකථන අංක ආකෘති පරීක්ෂා කිරීම

සමාලෝචනය

සාමාන්‍ය ජපන් දුරකථන අංක (උදා: 090-1234-5678, 03-1234-5678) නිවැරදි ආකෘතියට අනුකූලදැයි තීරණය කරන්න.

භාවිතා කිරීමට SQL

SELECT phone FROM users 
WHERE phone REGEXP '^(0[789]0-[0-9]{4}-[0-9]{4}|0[1-9]-[0-9]{4}-[0-9]{4})$';

විස්තර

  • 0[789]0-[0-9]{4}-[0-9]{4} → ජංගම අංක ( 090-xxxx-xxxx , 080-xxxx-xxxx , ආදිය )
  • 0[1-9]-[0-9]{4}-[0-9]{4} → ස්ථාවර අංක ( 03-xxxx-xxxx , 06-xxxx-xxxx , ආදිය )

මෙම ආකාරයෙන්, ආකෘති අඛණ්ඩතාව අවශ්‍ය වන විට නියමිත ප්‍රකාශන ප්‍රයෝජනවත් වේ.

4.3 ක්‍රෙඩිට් කාඩ් අංක ආකෘති වලංගු කිරීම

සමාලෝචනය

ක්‍රෙඩිට් කාඩ් අංක (Visa, Mastercard, American Express, ආදිය) ආකෘති වලංගු කරන්න.

භාවිතා කිරීමට SQL

SELECT card_number FROM payments 
WHERE card_number REGEXP '^(4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})$';

විස්තර

  • ^4[0-9]{12}(?:[0-9]{3})?$ → Visa (16 අංක හෝ 13 අංක)
  • ^5[1-5][0-9]{14}$ → Mastercard (අංක 16)
  • ^3[47][0-9]{13}$ → American Express (අංක 15)

මෙම විමසුම සමඟ, ඔබට දත්ත ගබඩාවේ වලංගු නොවන කාඩ් අංක (උදා: වැරදි දිග හෝ අසත්‍ය ආරම්භක අංක) ඉවත් කළ හැක.

4.4 HTML ටැග් ඉවත් කිරීම

සමාලෝචනය

පරිශීලක‑ඉදිරිපත් කළ දත්ත HTML ටැග් අඩංගු නම්, ඔබට ඒවා ඉවත් කර අන්තර්ගතය සාමාන්‍ය පෙළට පරිවර්තනය කළ හැක.

භාවිතා කිරීමට SQL

SELECT REGEXP_REPLACE(comment, '<[^>]+>', '') AS clean_comment FROM reviews;

විස්තර

  • '<[^>]+>'< සහ > අතර ඇති සියලු HTML ටැග් ඉවත් කරයි

උදාහරණ

InputOutput
<b>Hello</b> World!Hello World!
<p>これはサンプルです</p>これはサンプルです

මෙය පරිශීලක අදහස් සහ බ්ලොග් පෝස්ට් වලින් HTML ටැග් ඉවත් කිරීම සඳහා ප්‍රයෝජනවත් වේ.

4.5 තැපැල් කේත ආකෘති වලංගු කිරීම (ජපානය)

සමාලෝචනය

ජපන් තැපැල් කේත (උදා: 123-4567) නිවැරදි ආකෘතියට අනුකූලදැයි පරීක්ෂා කරන්න.

භාවිතා කිරීමට SQL

SELECT postal_code FROM addresses 
WHERE postal_code REGEXP '^[0-9]{3}-[0-9]{4}$';

විස්තර

  • ^[0-9]{3}-[0-9]{4}$“3 අංක-4 අංක” ආකෘතියේ තැපැල් කේතයක්

මෙම නියමිත ප්‍රකාශන භාවිතයෙන් දත්ත අඛණ්ඩතාව රැක ගැනීමට සහ වැරදි ආකෘති වැළැක්වීමට උපකාරී වේ.

4.6 පරිශීලක නාම පිරික්සුම (අවසර නොලත් වචන හඳුනා ගැනීම)

සමාලෝචනය

Check whether usernames contain disallowed words reserved for system use (e.g., admin, root, system) during registration.

SQL to Use

SELECT username FROM users 
WHERE username REGEXP 'admin|root|system';

Explanation

  • admin|root|system → මෙම පදයන් අඩංගු පරිශීලක නාමයන් හඳුනා ගනී

මෙම විමසුම සාමාන්‍ය පරිශීලකයන්ට පද්ධති පරිපාලකයන් සඳහා නියමිත නාම භාවිතය වැළැක්වීමට උපකාරී වේ.

Summary

  • නියමිත පදනම් ඊමේල් ලිපින, දුරකථන අංක, සහ ණය පත අංක වල සත්‍යාපනය සඳහා භාවිතා කළ හැක.
  • එමඟින් HTML ටැග් ඉවත් කිරීම සහ දත්ත ආකෘති පරිවර්තනය කිරීමටද භාවිතා කළ හැක.
  • අනුමත නොකළ වචන පෙරහන් කිරීම සහ තැපැල් කේත සත්‍යාපනය වැනි කාර්යයන් මගින් දත්ත ගබඩා ආරක්ෂාව සහ සමතුලිතතාවය වැඩිදියුණු කිරීමේදී ඒවා ප්‍රයෝජනවත් වේ.

5. Important Considerations When Using Regular Expressions (Performance and Security)

Using regular expressions in MySQL enables powerful searching and data cleansing. However, improper usage can cause performance degradation and introduce security risks. This section explains key considerations for using MySQL regular expressions safely and efficiently.

5.1 Performance Optimization for Regular Expressions

MySQL regex searching is convenient, but it has a drawback: indexes generally do not apply, which can make queries slower.

Measures to Improve Performance

  1. LIKE හෝ FULLTEXT සුචක එකතු කරන්න
    SELECT * FROM users WHERE email LIKE '%gmail.com';
    
  1. සරල නියමිත පදනම් භාවිතා කරන්න
    SELECT * FROM users WHERE name REGEXP '^admin|admin$';
    
  1. ඉලක්ක දත්ත පළමුව පෙරහන් කරන්න
    SELECT * FROM users WHERE email LIKE 'a%' AND email REGEXP '^[a-zA-Z0-9._%+-]+@gmail\.com$';
    

5.2 Security Risks and Countermeasures

1. නියමිත පදනම් DoS (ReDoS)

  • .* වැනි සීමාව නොමැති ගැලපුම් වලින් වැළකින්න.
  • සෙවීමේ පරාසය සීමා කිරීමට ^ සහ $ භාවිතා කරන්න.
  • පරිශීලක ආදානය සෘජුව REGEXP වෙත ලබා නොදෙන්න.

2. SQL Injection සහ නියමිත පදනම්

Unsafe query

SELECT * FROM users WHERE username REGEXP '$input';

Safe query (use placeholders)

$stmt = $pdo->prepare("SELECT * FROM users WHERE username REGEXP ?");
$stmt->execute([$sanitized_input]);

5.3 Version Compatibility

VersionMain Features
MySQL 5.xOnly the REGEXP operator is available
MySQL 8.xAdds REGEXP_LIKE(), REGEXP_INSTR(), REGEXP_SUBSTR(), and REGEXP_REPLACE()

Summary

  • REGEXP සුචක භාවිතා නොකරන බැවින්, කාර්ය සාධන ක්‍රියාමාර්ග වැදගත් වේ.
  • ReDoS (නියමිත පදනම් DoS) වැළැක්වීමට, අධික වයිල්ඩ්කාඩ් භාවිතය avoided.
  • SQL injection වැළැක්වීමට, පරිශීලක ආදානය සෘජුව REGEXP වෙත යොදන්න එපා.

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

Here are common questions about using MySQL regular expressions (REGEXP). Resolving these issues will help you use regex more effectively.


6.1 MySQL හි මට භාවිතා කළ හැකි regex රටා කුමනවාද?

SymbolDescriptionExampleResult
.Any single charactera.c"abc", "aac", "adc"
^Start of the string^abc"abcde" (does not match "dabc")
$End of the stringxyz$"axyz" (does not match "xyzb")
[]Any of the specified characters[abc]"a", "b", "c"
[^]Any character not in the specified set[^abc]Any character except "a", "b", "c"
*Repeat the preceding character 0 or more timesa*"", "a", "aa", "aaa"
+Repeat the preceding character 1 or more timesa+"a", "aa", "aaa" (does not match "")

6.2 LIKE සහ REGEXP අතර වෙනස කුමක්ද?

ComparisonLIKEREGEXP
FunctionalitySimple pattern matchingSearching with complex regular expressions
Wildcards% (any string), _ (any single character).* (any string), ^, $, [a-z], etc.
Search speedFast because indexes can applyOften slower due to full table scans
Use casesSimple searches (contains, prefix matching, etc.)Complex searches based on specific patterns

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

6.3 MySQL 5.x සහ MySQL 8.x අතර regex විශේෂාංග වෙනස්කම් කුමනවාද?

VersionMain Features
MySQL 5.xOnly the REGEXP operator is available
MySQL 8.xAdds REGEXP_LIKE(), REGEXP_INSTR(), REGEXP_SUBSTR(), and REGEXP_REPLACE()

6.4 regex එකක් අපේක්ෂිත ලෙස ක්‍රියා නොකරන්නේ නම් මොකද කළ යුතුද?

Checklist

  1. ඉස්කේප් (escaping) නිවැරදිදැයි පරීක්ෂා කරන්න
    SELECT * FROM users WHERE email REGEXP '\.com$';
    
  1. REGEXP_LIKE() සමඟ i කොඩිය (flag) භාවිතා කර බලන්න
    SELECT * FROM users WHERE REGEXP_LIKE(username, 'admin', 'i');
    
  1. දත්ත කේතනය (encoding) පරීක්ෂා කරන්න
    SHOW VARIABLES LIKE 'character_set_database';
    

6.5 REGEXP විමසුම් කාර්ය සාධනය වැඩිදියුණු කිරීමේ ක්‍රම මොනවාද?

  1. LIKE සමඟ පෙර-පෙරහන් කිරීම
    SELECT * FROM users 
    WHERE email LIKE '%gmail.com' 
    AND email REGEXP '^[a-zA-Z0-9._%+-]+@gmail\.com$';
    
  1. අවශ්‍ය තැන්වල සුචක (indexes) භාවිතා කරන්න
    ALTER TABLE users ADD FULLTEXT(email);
    

සාරාංශය

  • REGEXP සුචක භාවිතා නොකරන බැවින්, කාර්ය සාධන ක්‍රියාමාර්ග වැදගත් වේ.
  • ReDoS (නියමිත පදනම් DoS) වැළැක්වීමට, අධික වයිල්ඩ්කාඩ් භාවිතය avoided.
  • SQL injection වැළැක්වීමට, පරිශීලක ආදානය සෘජුව REGEXP වෙත යොදන්න එපා.

  • REGEXP LIKE ට වඩා ශක්තිමත් ය, නමුත් කාර්ය සාධනය ගැන සැලකිලිමත් විය යුතුයි.

  • MySQL 8.0 හි, REGEXP_LIKE() වැනි නව regex ශ්‍රිය (functions) එකතු කරන ලදී, වඩා නම්‍යශීලී සැකසුම්කරණය සඳහා හැකියාව ලබා දෙමින්.
  • කාර්ය සාධනය වැඩිදියුණු කිරීමට: LIKE සමඟ ඒකාබද්ධ කරන්න, සුචිකරණ (indexes) භාවිතා කරන්න, සහ සරල regex රටා නිර්මාණය කරන්න.

7. සාරාංශය

MySQL නිතිඅනුකූල සමිකරණ (REGEXP) දත්ත සෙවීම, සත්‍යාපනය සහ ආකෘති පරිවර්තනය සඳහා ඉතා උපකාරී වේ. මෙම ලිපිය MySQL regex මූලික, MySQL 8.0 සහ පසුකාලීනව එකතු කළ නව විශේෂාංග, ප්‍රායෝගික උදාහරණ, වැදගත් සලකා බැලීම්, සහ FAQ ආවරණය කළේය.

7.1 ප්‍රධාන ඉගෙනීම්

මෙන්න වඩාත් වැදගත් කරුණුවල වේගවත් සාරාංශයක්.

1. MySQL නිතිඅනුකූල සමිකරණ මූලික

  • REGEXP ක්‍රියාකාරකය භාවිතයෙන් LIKE ට වඩා නම්‍යශී රටා සමගත කිරීම හැකියාව ලැබේ.
  • පොදු regex රටා
  • ^ (ආරම්භය), $ (අවසානය), . (එක ඕනෑම තනි අක්ෂරයක්), [] (අක්ෂර පන්තිය), + (එක හෝ ඊට වැඩි පුනරාවර්තන), ආදිය.

2. MySQL 8.0+ හි නව නිතිඅනුකූල සමිකරණ ශ්‍රිය

MySQL 8.0 හි, මෙම ශ්‍රිය හතර එකතු කරන ලදී, වඩා නම්‍යශී සැකසුම්කරණය සඳහා හැකියාව ලබා දෙමින්:

  • REGEXP_LIKE() : REGEXP ක්‍රියාකාරකයට විකල්පයක්
  • REGEXP_INSTR() : සමගත උපවාකයේ ආරම්භක පිහිටුම ලබා ගන්න
  • REGEXP_SUBSTR() : සමගත උපවාකය ඉවත් කරන්න
  • REGEXP_REPLACE() : regex භාවිතයෙන් උපවාක ප්‍රතිස්ථාපනය කරන්න

3. ප්‍රායෝගික උදාහරණ

  • විද්‍යුත් තැපෑල ලිපින සත්‍යාපනය
  • දුරකථන අංක සහ ණය පත්‍රිකා අංක පරීක්ෂාවන්
  • HTML ටැග් ඉවත් කිරීම
  • අඛණ්ඩ කේත ආකෘති සත්‍යාපනය
  • නි for තවමත් නොහැකි වචන හඳුනා ගැනීම
  • දත්ත සෝදිසි කිරීම (තිරිසන් විභාග කපා ඉවත් කිරීම, කොමා ඉවත් කිරීම, ආදිය.)

4. නිතිඅනුකූල සමිකරණ භාවිතා කිරීමේදී වැදගත් සලකා බැලීම්

  • කාර්ය සාධනය උපායමාර්ගීකරණය
  • REGEXP සුචිකරණ භාවිතා නොකරන නිසා, එය සම්පූර්ණ පුවරු ස්කෑන් ඇති කළ හැකිය.
  • LIKE හෝ FULLTEXT සුචිකරණ ඒකාබද්ධ කිරීමෙන් කාර්ය සාධනය වැඩිදියුණු කළ හැකිය.
  • ආරක්ෂාවේ උපාය මාර්ග
  • ReDoS (Regular Expression DoS) වැළැක්වීමට, .* හි අධික භාවිතයෙන් වළකින්න.
  • SQL injection වැළැක්වීමට, placeholders භාවිතා කරන්න.

5. FAQ (පොදු ප්‍රශ්න)

  • MySQL හි ලබා ගත හැකි regex රටා
  • LIKE සහ REGEXP අතර වෙනස්කම්
  • MySQL 5.x සහ 8.x අතර විශේෂාංග වෙනස්කම්
  • regex අපේක්ෂිත පරිදි හැසිරෙන්නේ නැති විට ගැටලු විසඳීම
  • කාර්ය සාධනය වැඩිදියුණු කිරීමේ ක්‍රම

7.2 නිතිඅනුකූල සමිකරණ භාවිතා කිරීමේ හොඳම පුරුදු

  1. regex රටා සරලව තබා ගන්න
  • උදාහරණය: .* හි අධික භාවිතයෙන් වළකින්න සහ ^ (ආරම්භය) සහ $ (අවසානය) භාවිතා කරන්න.
  1. අදාළ තැනක LIKE හෝ FULLTEXT සමඟ ඒකාබද්ධ කරන්න
  • LIKE සමඟ පූර්ව-පෙරලි කරන්න, ඉන්පසු REGEXP භාවිතා කරන්න විමසුම් පිරිවැය අඩු කිරීමට.
  1. REGEXP_REPLACE() දත්ත සෝදිසි කිරීමට භාවිතා කරන්න
  • උදාහරණය: HTML ටැග් ඉවත් කරන්න සහ අනවශ්‍ය විභාග සමාන්කරණය කරන්න.
  1. MySQL 8.0 සහ පසුකාලීනව භාවිතා කිරීමේ වාසිය ගන්න
  • REGEXP_LIKE() වැනි නව ශ්‍රිය භාවිතයෙන් SQL වඩා පිළිගත හැකිය.
  1. ආරක්ෂා උපාය මාර්ග පුළුල්ව යෙදෙන්න
  • පරිශීලක ආදාන REGEXP හි සෘජුව යෙදෙන්නේ නැත (SQL injection වැළැක්වීම).
  • ගතික විමසුම් සඳහා placeholders භාවිතා කරන්න.

7.3 තවදුරටත් ඉගෙනීම සඳහා සම්පත්

මෙන්න MySQL නිතිඅනුකූල සමිකරණ ගැඹුරින් ඉගෙන ගැනීමට උපකාර වන යොමුකිරීම්.

ලියකියවිලි ලේඛන

7.4 අවසාන සටහන්

MySQL නිතිඅනුකූල සමිකරණ දත්ත සෙවීම, සෝදිසි කිරීම සහ සත්‍යාපනය ඇතුළු බොහෝ තත්ත්වයන්හි භාවිතා කළ හැකිය. කෙසේ වෙතත්, කාර්ය සාධනය සහ ආරක්ෂා සලකා බැලීම් තේරුම් ගනිමින් ඒවා සුදුසු ලෙස භාවිතා කිරීම වැදගත් වේ.

අපි බලාපොරොත්තු වන්නේ මෙම ලිපිය MySQL නිතිඅනුකූල සමිකරණ සමඟ වැඩ කිරීමේදී ඔබට උපකාරී වේවි. ඔබේ ව්‍යාපෘතිවල මෙම තාක්ෂණය භාවිතා කිරීම උත්සාහ කරන්න!