“දැන් ඔබට ගැටලු දෙකක් තිබේ” යන්නෙන් අදහස් කරන්නේ කුමක්ද?


200

නැත විසින් ජනප්රිය උපුටා ජැමී Zawinski :

සමහර අය, ගැටලුවකට මුහුණ දෙන විට, "මම දනිමි, මම සාමාන්‍ය ප්‍රකාශන භාවිතා කරමි" යැයි සිතන්න. දැන් ඔවුන්ට ගැටළු දෙකක් තිබේ.

මෙම උපුටා දැක්වීම තේරුම් ගත යුත්තේ කෙසේද?


46
2 වන ගැටළුව වන්නේ ඔවුන් රීජෙක්ස් භාවිතා කරන අතර තවමත් පළමු ගැටළුව විසඳී නොමැති නිසා ගැටළු 2 ක්.
Ampt

24
@Euphoric - ඇත්තටම, හොඳ කේතය වන නමුත් සංක්ෂිප්ත cryptically නොවී - කෙටි.
ස්ටීව් 314

24
QIQAndreas: මම හිතන්නේ එය අර්ධ හාස්‍යජනක වීමට අදහස් කර ඇත. කරන ලද ප්‍රකාශය නම්, ඔබ පරෙස්සම් නොවන්නේ නම්, නිත්‍ය ප්‍රකාශන භාවිතා කිරීමෙන් වඩා හොඳ වෙනුවට නරක අතට හැරිය හැකි බවයි.
FrustratedWithFormsDesigner

145
සමහර අය, යමක් පැහැදිලි කිරීමට උත්සාහ කරන විට, "මම දනිමි, මම ජේමි සැවින්ස්කි උපුටා දැක්වීමක් භාවිතා කරමි" යැයි සිතන්න. දැන් ඔවුන්ට පැහැදිලි කිරීමට කරුණු දෙකක් තිබේ.
බාධා කරන්න

Answers:


220

සමහරක් වැඩසටහන් තාක්ෂණයන් වැඩසටහන්කරුවන් (විසින් හොඳින් අවබෝධ සාමාන්යයෙන් නොවේ සාමාන්ය ප්රකාශනයක , ඉපිලුම් ලක්ෂ්ය , perl බසට ලං , AWK , IOC ... සහ තවත් අය ).

නිවැරදි ගැටළු සමූහය විසඳීම සඳහා මේවා පුදුමාකාර ලෙස බලවත් මෙවලම් විය හැකිය. නිත්‍ය භාෂාවන් ගැලපීම සඳහා නිතිපතා ප්‍රකාශන ඉතා ප්‍රයෝජනවත් වේ. ගැටලුවේ හරය තිබේ: සාමාන්‍ය භාෂාවක් විස්තර කරන්නේ කෙසේදැයි ස්වල්ප දෙනෙක් දනිති (එය විහිළු සංකේත භාවිතා කරන පරිගණක විද්‍යා න්‍යායේ / වාග් විද්‍යාවේ කොටසකි - ඔබට ඒ ගැන චොම්ස්කි ධූරාවලියෙන් කියවිය හැකිය ).

මේ දේවල් සමඟ ගනුදෙනු කිරීමේදී, ඔබ ඒවා වැරදි ලෙස භාවිතා කරන්නේ නම්, ඔබ ඇත්ත වශයෙන්ම ඔබේ මුල් ගැටලුව විසඳා ඇතැයි සිතිය නොහැක. භාවිතා HTML ගැලපෙන ප්රකාශන (අ ඕනෑවට වඩා බහුලව සිදුවන) ඔබ අදහස් කරන ඇත අද්දර නඩු නැතුව පාලුයි. දැන්, ඔබ තවමත් විසඳා නැති මුල් ගැටළුව ඔබ සතුව ඇති අතර, ඒ වටා පාවෙන තවත් සියුම් දෝෂයක් හඳුන්වා දී ඇත්තේ වැරදි විසඳුමක් භාවිතා කරමිනි.

මින් අදහස් කරන්නේ නිත්‍ය ප්‍රකාශන භාවිතා නොකළ යුතු බව නොව, යමෙකුට විසඳිය හැකි ගැටළු මොනවාද යන්න තේරුම් ගැනීමට යමෙකු ක්‍රියා කළ යුතු අතර ඒවා විසඳීමට හා ඒවා යුක්තිසහගත ලෙස භාවිතා කිරීමට නොහැකි වීමයි.

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

දැන් ඔබට නව ගැටලුවක් තිබේ; එය නිරාකරණය කිරීම සඳහා ඔබ නිත්‍ය ප්‍රකාශනයේ මෙවලම තෝරාගෙන ඇත (එය නුසුදුසු විට), ඔබට දැන් දෝෂ දෙකක් තිබේ, ඒ දෙකම සොයා ගැනීමට අපහසුය, මන්ද ඒවා වෙනත් වියුක්ත ස්ථරයක සැඟවී ඇති බැවිනි.


8
ක්‍රමලේඛකයින් විසින් හොඳින් වටහා නොගත් තාක්ෂණ ලැයිස්තුවකට පර්ල් අයත් බව මට විශ්වාස නැත;)
crad

21
පර්ල් ගැන ද පවසා ඇති බව තව දුරටත් කියන්න ... එය එහි ජනප්‍රිය වී ඇති බව බොහෝ අය අසා ඇත. සසම්භාවී කතාවේ පාවෙන ලක්ෂ්‍යයට මම තවමත් කැමතියි: "දැන් ඔබට ගැටළු 2.00000152 ඇත"

56
radcrad සමහර අය, ගැටලුවකට මුහුණ දෙන විට, "මම දනිමි, මම පර්ල් භාවිතා කරමි" යැයි සිතන්න. දැන් ඔවුන්ට $ (^ @ #% () ^%) (#) ගැටළු ඇත.
මයිකල් හැම්ප්ටන්

4
En ජෙන්ස් යමක් තිබේ නම්, PCRE එදිරිව සාම්ප්‍රදායික රීජෙක්ස් හි අතිරේක බලය නිසා එය වඩාත් පෙළඹවීමේ විසඳුමක් වන අතර එය නඩත්තු කිරීම වඩාත් අපහසු වේ. පර්ල්-අනුකූල නිත්‍ය ප්‍රකාශන කාර්යක්ෂමව ගැලපීම සඳහා සීමිත ස්වයංක්‍රීයව විස්තාරණය කිරීමේදී PCRE ගැලපෙන සීමිත ස්වයංක්‍රීයව ගවේෂණය කර ඇත ... සහ එය සුළුපටු නොවන දෙයකි. අවම වශයෙන් සාම්ප්‍රදායික රීජෙක්ස් සමඟ, අවශ්‍ය සංකල්ප තේරුම් ගත් පසු යමෙකුට එතරම් කරදරයකින් තොරව හිස වටා එතීමට හැකිය .

6
ඔබ හොඳ අදහසක් ඉදිරිපත් කරයි. නිත්‍ය ප්‍රකාශන effectively ලදායී ලෙස දෙවන, සුළු නොවන භාෂාවකි. මුල් ක්‍රමලේඛකයා ප්‍රධාන භාෂාවෙන් දක්ෂ වුවත්, රීජෙක්ස් වල රසය භාවිතා කළත්, “දෙවන භාෂාවකට” එකතු කිරීම යන්නෙන් අදහස් කරන්නේ නඩත්තු කරන්නන් ඒ දෙකම දැන ගනු ඇති බවයි. රීජෙක්ස් කියවීමේ හැකියාව බොහෝ විට "ධාරක" භාෂාවට වඩා අඩු බව සඳහන් නොකල යුතුය.
ජේ.

95

නිත්‍ය ප්‍රකාශන - විශේෂයෙන් සුළු නොවන ඒවා - කේත කිරීමට, තේරුම් ගැනීමට සහ නඩත්තු කිරීමට අපහසු විය හැකිය. ඔබ කළ යුතුව ඇත්තේ ස්ටැක් පිටාර ගැලීම ටැග් කර ඇති ප්‍රශ්න ගණන පමණි, [regex]එහිදී ප්‍රශ්න කරන්නා ඔවුන්ගේ ගැටලුවට පිළිතුර රීජෙක්ස් යැයි උපකල්පනය කර පසුව හිර වී ඇත. බොහෝ අවස්ථාවන්හිදී ගැටළුව වෙනත් ආකාරයකින් විසඳිය හැකිය (සහ සමහර විට).

මෙයින් අදහස් කරන්නේ, ඔබ රීජෙක්ස් භාවිතා කිරීමට තීරණය කළහොත් ඔබට දැන් ගැටළු දෙකක් ඇති බවයි:

  1. ඔබට විසඳීමට අවශ්‍ය මුල් ගැටළුව.
  2. රීජෙක්ස් එකක සහාය.

මූලික වශයෙන්, මම හිතන්නේ ඔහු අදහස් කරන්නේ ඔබ රීජෙක්ස් භාවිතා කළ යුත්තේ ඔබේ ගැටලුව විසඳීමට වෙනත් ක්‍රමයක් නොමැති නම් පමණක් බවයි. තවත් විසඳුමක් වන්නේ කේත කිරීම, නඩත්තු කිරීම සහ සහාය දීම පහසු වනු ඇත. එය මන්දගාමී හෝ අඩු කාර්යක්ෂමතාවයකින් යුක්ත විය හැකි නමුත් එය තීරණාත්මක නොවේ නම් නඩත්තු කිරීමේ පහසුකම සහ සහාය සැලකිය යුතු කරුණකි.


27
හා වඩා නරක ය: HTML වැනි තමන්ට කළ නොහැකි දේ විග්‍රහ කිරීමට ඒවා භාවිතා කිරීමට මිනිසුන් පොළඹවා ගැනීමට තරම් ඔවුන් බලවත් ය. SO හි ඇති බොහෝ ප්‍රශ්න "මම HTML විග්‍රහ කරන්නේ කෙසේද?"
ෆ්‍රෑන්ක් ෂෙයාර්

6
සමහර තත්වයන් සඳහා රීජෙක්ස් නියමයි. තවත් බොහෝ අවස්ථාවලදී එතරම් නොවේ. අනෙක් කෙළවරේ එය භයානක බලාපොරොත්තු සුන්වීමකි. යමෙකු පළමු වරට ඔවුන් ගැන දැනගෙන සෑම තැනකම යෙදුම් බැලීමට පටන් ගත් විට ගැටළුව බොහෝ විට පැන නගී. තවත් ප්‍රසිද්ධ කියමනක්: "ඔබ සතුව ඇති එකම මෙවලම මිටියක් වන විට සියල්ල නියපොතු මෙන් පෙනේ."
ටොඩ් විලියම්සන්

3
මෙයින් අදහස් කරන්නේ SO [c #] ටැගයේ ඇති ප්‍රශ්න ගණන අනුව, එය තේරුම් ගැනීමට අපහසුම ක්‍රමලේඛන භාෂාවද?

2
නූල් ක්‍රම සඳහා දිගු ඇමතුම් මාලාවකට වඩා සංකීර්ණ නිත්‍ය ප්‍රකාශනයක් මම දකිමි. ඔටෝ, සංකීර්ණ භාෂාවන් විග්‍රහ කිරීම සඳහා නිතිපතා ප්‍රකාශන අනිසි ලෙස භාවිතා කිරීම දැකීමට මම අකමැතියි.
කෙවින් ක්ලයින්

5
"මූලික වශයෙන්, මම හිතන්නේ ඔහු අදහස් කරන්නේ ඔබ රීජෙක්ස් භාවිතා කළ යුත්තේ ඔබේ ගැටලුව විසඳීමට වෙනත් ක්‍රමයක් නොමැති නම් පමණක් බවයි. වෙනත් ඕනෑම විසඳුමක් කේත කිරීමට, නඩත්තු කිරීමට සහ සහාය දීමට පහසු වනු ඇත." - බැරෑරුම් ලෙස එකඟ නොවන්න .. රීජෙක්ස් විශිෂ්ට මෙවලම් වේ, ඔබ ඒවායේ සීමාවන් දැන සිටිය යුතුය. බොහෝ කාර්යයන් රීජෙක්ස් සමඟ වඩාත් අලංකාර ලෙස කේතනය කළ හැකිය. (නමුත්, උදාහරණයක් ලෙස, ඔබ ඒවා HTML විග්‍රහ කිරීමට භාවිතා නොකළ යුතුය)
කරෝලි හෝර්වාත්

68

එය බොහෝ දුරට සත්‍යයේ ධාන්ය වර්ගයක් වුවද, කම්මුලට විහිළුවක්.

නිත්‍ය ප්‍රකාශන විශිෂ්ට සුදුසුකමක් වන කාර්යයන් කිහිපයක් තිබේ. මම වරක් අතින් ලියන ලද පුනරාවර්තන සම්භවයක් ඇති පේසර් කේත පේළි 500 ක් එක් නිත්‍ය ප්‍රකාශනයකින් ප්‍රතිස්ථාපනය කළෙමි. මිනිසුන් පවසන්නේ රීජෙක්ස් තේරුම් ගැනීමට සහ නිදොස්කරණය කිරීමට අපහසු නමුත් නිසි ලෙස යෙදූ ඒවා අතින් නිර්මාණය කරන ලද විශාල පාර්සලයක් ලෙස නිදොස්කරණය කිරීම තරම් අපහසු නොවන බවයි. මගේ උදාහරණයේ දී, රීජෙක්ස් නොවන විසඳුමේ සියලු දාර නිදොස් කිරීමට සති දෙකක් ගත විය.

කෙසේ වෙතත්, බෙන් මාමා:

විශාල ප්‍රකාශනයක් සහිතව විශාල වගකීමක් පැවරේ.

වෙනත් වචන වලින් කිවහොත්, රීජෙක්ස් ඔබේ භාෂාවට ප්‍රකාශන හැකියාව එක් කරයි, නමුත් එමඟින් යම් කාර්යයක් සඳහා වඩාත්ම කියවිය හැකි ප්‍රකාශන මාදිලිය තෝරා ගැනීමට ක්‍රමලේඛකයාට වැඩි වගකීමක් පැවරේ.

සමහර දේවල් මුලදී සාමාන්‍ය ප්‍රකාශන සඳහා හොඳ කාර්යයක් සේ පෙනේ, නමුත් එසේ නොවේ. උදාහරණයක් ලෙස, HTML වැනි කැදැලි ටෝකන සහිත ඕනෑම දෙයක්. සමහර විට සරල ක්‍රමයක් වඩාත් පැහැදිලි වන විට මිනිසුන් සාමාන්‍ය ප්‍රකාශනයක් භාවිතා කරයි. උදාහරණයක් ලෙස, string.endsWith("ing")සමාන රීජෙක්ස් වලට වඩා තේරුම් ගැනීම පහසුය. සමහර විට මිනිසුන් විශාල ගැටළුවක් තනි රීජෙක්ස් බවට පත් කිරීමට උත්සාහ කරයි, එහිදී එය කැබලිවලට කැඩීම වඩාත් යෝග්‍ය වේ. සමහර විට මිනිසුන් සුදුසු වියුක්තයන් නිර්මාණය කිරීමට අපොහොසත් වන අතර, එකම කාර්යය කිරීම සඳහා හොඳින් නම් කරන ලද ශ්‍රිතයක් නිර්මාණය කරනවා වෙනුවට රීජෙක්ස් නැවත නැවතත් පුනරාවර්තනය කරයි (සමහර විට අභ්‍යන්තරව රීජෙක්ස් සමඟ ක්‍රියාත්මක වේ).

කිසියම් හේතුවක් නිසා, රීජෙක්ස් හි තනි වගකීම සහ ඩ්‍රයි වැනි සාමාන්‍ය මෘදුකාංග ඉංජිනේරු මූලධර්මවලට අන්ධ ස්ථානයක් නිර්මාණය කිරීමේ අමුතු ප්‍රවණතාවක් ඇත. ඔවුන්ට ආදරය කරන පුද්ගලයින් පවා ඇතැම් විට ඒවා ගැටළු සහගත වන්නේ එබැවිනි.


10
බෙන් මාමා ද “සෑම විටම පරිපූර්ණ ප්‍රති results ල” නොකියන්නේද? සමහර විට මිනිසුන් රෙජෙක්ස් ගැන සතුටු වන්නේ ඒ නිසා විය හැකිය ...
ඩොයිල්

4
අද්දැකීම් අඩු සංවර්ධකයින් වෙත ගමන් කරන HTML සම්බන්ධව රීජෙක්ස් හි ඇති ගැටළුව නම්, HTML හි සන්දර්භය රහිත ව්‍යාකරණයක් තිබීම, නිත්‍ය නොවේ: රීජෙක්ස් සරල HTML (හෝ XML) විග්‍රහ කිරීම සඳහා භාවිතා කළ හැකිය (උදා: නම් කරන ලද නැංගුරම් ටැගයකින් URL එකක් අල්ලා ගැනීම), නමුත් සංකීර්ණ කිසිවක් සඳහා හොඳින් ගැලපෙන්නේ නැත. ඒ සඳහා DOM විග්‍රහ කිරීම වඩාත් යෝග්‍ය වේ. අදාළ කියවීම: චොම්ස්කි ධූරාවලිය .

52

මෙම උපුටා දැක්වීම ගැන සාකච්ඡා කරන බ්ලොග් සටහනක ජෙෆ් ඇට්වුඩ් වෙනස් අර්ථකථනයක් ගෙන එයි: නිත්‍ය ප්‍රකාශන: දැන් ඔබට ගැටළු දෙකක් තිබේ ( සබැඳිය සඳහා යූෆොරික්ට ස්තූතියි )

මුල් 1997 ත්‍රෙඩ් එකේ ජේමිගේ පෝස්ට් වල සම්පූර්ණ පිටපත විශ්ලේෂණය කිරීමෙන් අපට පහත දේ සොයාගත හැකිය:

පර්ල්ගේ ස්වභාවය අනෙකුත් සියලුම ශිල්පීය ක්‍රම බැහැර කිරීම සඳහා නිත්‍ය ප්‍රකාශන භාවිතා කිරීම දිරිමත් කරයි; ඒවා දුර සිට දුරින් වඩාත් පැහැදිලිව පෙනෙන (අවම වශයෙන් වඩා හොඳ නොදන්නා අයට) A ලක්ෂ්‍යයේ සිට B දක්වා ලබා ගත හැකි ක්‍රමයක්.

පළමු උපුටා දැක්වීම බැරෑරුම් ලෙස සැලකිය නොහැකිය. නමුත් මෙය මම සම්පූර්ණයෙන්ම එකඟ වෙමි. ජේමි ඉදිරිපත් කිරීමට උත්සාහ කළ කාරණය මෙන්න: නිත්‍ය ප්‍රකාශන නපුරු බව නොවේ, නමුත් නිත්‍ය ප්‍රකාශන ඕනෑවට වඩා භාවිතා කිරීම නපුරකි.

ඔබ පවා නම් නෑ සාමාන්ය ප්රකාශනයක සම්පූර්ණයෙන්ම තේරුම් ගැනීමට ඔබ අමාරුවේ ගෝල්ඩන් හැමර් එය (ද බලන්න පහසු සහ නිරන්තරයෙන් කේතය සමඟ එකම දෙයක් කරන්න වැඩි පැහැදිලි වනු ඇත විට, සාමාන්ය ප්රකාශනයක සමඟ ගැටලුව විසඳීමට උත්සාහ, ප්රශ්නය Regex භාවිතය: CodingHorror එදිරිව රෙජෙක්ස් අපයෝජනය ).

උපුටා දැක්වීමේ සන්දර්භය දෙස බලන තවත් බ්ලොග් සටහනක් ඇත, එය ඇට්වුඩ්ට වඩා සවිස්තරාත්මකව දක්වයි: ජෙෆ්රි ෆ්‍රීඩ්ල්ගේ බ්ලොග් අඩවිය: සුප්‍රසිද්ධ “දැන් ඔබට ගැටලු දෙකක් තිබේ” උපුටා දැක්වීමේ මූලාශ්‍රය


3
මෙය මගේ මනසට හොඳම පිළිතුර වන්නේ එය සන්දර්භය එක් කරන බැවිනි. රීජෙක්ස් පිළිබඳ jwz ගේ විවේචනය පර්ල් ගැන ඕනෑම දෙයක් තරම් විය.
Evicatos

3
VEvicatos 1997 දී තවත් බ්ලොග් සටහනක
IQAndreas

30

මෙම උපුටා දැක්වීම සමඟ කරුණු කිහිපයක් සිදුවෙමින් පවතී.

  1. මෙම උපුටා කලින් විහිළුවක් ක ෙල්ඛනගත කිරීම වේ:

    ගැටලුවකට මුහුණ දෙන සෑම අවස්ථාවකම සමහර අය පවසන්නේ "AWK භාවිතා කරමු" කියාය. දැන් ඔවුන්ට ගැටළු දෙකක් තිබේ. - ඩී. ටිල්බ ro ක්

    එය විහිළුවක් සහ සැබෑ කැණීමක් වන නමුත් එය වෙනත් නරක විසඳුම් සමඟ සම්බන්ධ කිරීමෙන් රීජෙක්ස් නරක විසඳුමක් ලෙස ඉස්මතු කිරීමේ ක්‍රමයකි. ඒක නියම හෙක් හයක් පමණයි .

  2. මට නම් මතක තබා ගන්න, මෙම උපුටා දැක්වීම හිතාමතාම අර්ථ නිරූපණයට විවෘතය - අර්ථය කෙළින්ම ඉදිරියට ය. සාමාන්‍ය ප්‍රකාශනයක් භාවිතා කිරීමේ අදහස සරලව ප්‍රකාශ කිරීමෙන් ගැටළුව විසඳී නොමැත. ඊට අමතරව, ඔබ භාවිතා කරන ඕනෑම භාෂාවකට වඩා වෙනස් නීති රීති සමඟ අතිරේක භාෂාවක් එකතු කිරීමෙන් ඔබ කේතයේ සංජානන සංකීර්ණතාව වැඩි කර ඇත.

  3. විහිළුවක් ලෙස විහිළුවක් වුවද, ඔබ රීජෙක්ස් නොවන විසඳුමක සංකීර්ණත්වය රීජෙක්ස් ද්‍රාවණයේ සංකීර්ණතාව හා සංසන්දනය කළ යුතුය. රීජෙක්ස් එකතු කිරීමේ අමතර පිරිවැය නොතකා, රීජෙක්ස් සමඟ ගැටළුවක් විසඳීම වටී.


21

RegularExpressionsarenoworsetoreadormaintainthananyotherunformattedcontent;

. ඔබට එය කළ හැකි බව නොදනී.)


මෙන්න සුළු උදාහරණයක්:

^(?:[^,]*+,){21}[^,]*+$


කෙසේ වෙතත් කියවීමට හෝ නඩත්තු කිරීමට එතරම් අපහසු නොවන නමුත් එය මේ ආකාරයට පෙනෙන විට වඩාත් පහසු වේ:

(?x)    # enables comments, so this whole block can be used in a regex.
^       # start of string

(?:     # start non-capturing group
  [^,]*+  # as many non-commas as possible, but none required
  ,       # a comma
)       # end non-capturing group
{21}    # 21 of previous entity (i.e. the group)

[^,]*+  # as many non-commas as possible, but none required

$       # end of string

එය ඉහළ මට්ටමේ උදාහරණයකි (අදහස් දැක්වීම අදහස් $දැක්වීමට සමාන වේ i++) නමුත් පැහැදිලිවම කියවීම, අවබෝධ කර ගැනීම සහ එය පවත්වාගෙන යාමේ කිසිදු ගැටළුවක් නොවිය යුතුය.


නිත්‍ය ප්‍රකාශන සුදුසු වන්නේ කවදාද යන්න සහ ඒවා නරක අදහසක් වන විට ඔබ ඒවා පැහැදිලි කර ඇති තාක් කල්, ඒවායේ කිසිදු වරදක් නොමැති අතර බොහෝ විට JWZ උපුටා දැක්වීම සැබවින්ම අදාළ නොවේ.


1
ෂුවර්, නමුත් මම රීජෙක්ස් වල ගුණාංග පිළිබඳ සාකච්ඡා සොයන්නේ නැත, මෙම සාකච්ඡාව ඒ ආකාරයෙන් ඉදිරියට යනු දැකීමට මා කැමති නැත. මම උත්සාහ කරන්නේ ඔහු ලබා ගන්නේ කුමක්ද යන්න තේරුම් ගැනීමටයි.
පෝල් බිගාර්

1
එවිට ලිවිබෙටර්ගේ විවරණයේ ඇති සබැඳිය ඔබ දැනගත යුතු දේ ඔබට කියයි. මෙම ප්‍රතිචාරය පෙන්වා දෙන්නේ රීජෙක්ස් අපැහැදිලි විය යුතු නැති අතර, එම උපුටා දැක්වීම විකාරයකි.
පීටර් බූටන්

8
භාවිතා කිරීමේ තේරුම *+කුමක්ද? එය යුක්තිසහගත ලෙස වෙනස් වන්නේ කෙසේද *?
ටිම්වි

1
ඔබ කියන දේ සත්‍ය විය හැකි නමුත් එය මෙම නිශ්චිත ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත. ඔබේ පිළිතුර “උපුටා දැක්වීම සාමාන්‍යයෙන් සත්‍ය නොවන බව මගේ මතයයි”. ප්‍රශ්නය එය සත්‍යද නැද්ද යන්න ගැන නොවේ, නමුත් උපුටා දැක්වීමෙන් අදහස් කරන්නේ කුමක්ද.
බ්‍රයන් ඕක්ලි

2
*+මෙම නඩුවේ වචනාර්ථයෙන් කිසිදු තේරුමක් නැත ; සෑම දෙයක්ම නැංගුරම් ලා ඇති අතර ස්වයංක්‍රීය යන්ත්‍රයකින් 22 ක් දක්වා ගණනය කළ හැකි තනි පාස් එකකට ගැලපේ. කොමා නොවන කට්ටලවල නිවැරදි විකරණකාරකය යන්තම් පැරණි ය *. (එපමණක්ද නොව, කෑදර හා කෑදර නොවන ගැලපෙන ඇල්ගොරිතම අතර කිසිදු වෙනසක් නොතිබිය යුතුය. එය අතිශය සරල අවස්ථාවකි.)
ඩොනල් ෆෙලෝස්

14

ක්‍රිස්එෆ්ගේ පිළිතුරට අමතරව - නිත්‍ය ප්‍රකාශන “කේත කිරීමට, තේරුම් ගැනීමට හා නඩත්තු කිරීමට අපහසුය”, ඊටත් වඩා නරක ය: ඒවා HTML වැනි තමන්ට කළ නොහැකි දේ විග්‍රහ කිරීමට ඒවා භාවිතා කිරීමට උත්සාහ කිරීමට මිනිසුන් පොළඹවන තරම් බලවත් ය. SO හි ඇති බොහෝ ප්‍රශ්න "මම HTML විග්‍රහ කරන්නේ කෙසේද?" නිදසුනක් වශයෙන්, සියලුම SO හි ඇති වඩාත්ම එපික් පිළිතුර !


14

නිතිපතා ප්‍රකාශන ඉතා බලවත් ය, නමුත් ඒවාට ඇත්තේ එක් කුඩා හා එක් විශාල ගැටලුවකි; ඒවා ලිවීමට අපහසු වන අතර කියවීමට අපහසුය.

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

සමහර විට සාමාන්‍ය ප්‍රකාශන ලිවීමට පමණක් කේතය ලෙස හැඳින්වේ. නිවැරදි කිරීම අවශ්‍ය නිත්‍ය ප්‍රකාශනයකට මුහුණ දී ඇති අතර, ප්‍රකාශනය තේරුම් ගැනීමට උත්සාහ කරනවාට වඩා මුල සිටම ආරම්භ කිරීම වේගවත් වේ.


1
සැබෑ ගැටළුව නම්, රීජෙක්ස් වලට ක්‍රියාත්මක කළ නොහැකි වීමයි. උදා: ඒවා දැනට කොතරම් ගැඹුරට කැදැලි වී ඇත්දැයි ගණනය කළ නොහැක.

4
Or තෝර්බ්ජර්න් රව්න් ඇන්ඩර්සන්: එය ගැටලුවකට වඩා සීමාවකි. ඔබ ඒ සඳහා නිත්‍ය ප්‍රකාශන භාවිතා කිරීමට උත්සාහ කරන්නේ නම් එය ගැටළුවක් පමණක් වන අතර එය සාමාන්‍ය ප්‍රකාශන සමඟ ගැටළුවක් නොවේ, එය ඔබේ තේරීමේ ක්‍රමවේදය පිළිබඳ ගැටළුවකි.
ගුෆා

1
ඔබට ලෙක්සර් සඳහා ඉතා හොඳ RE භාවිතා කළ හැකිය (හොඳයි, බොහෝ භාෂා සඳහා) නමුත් ටෝකන් ප්‍රවාහය විග්‍රහ ගසකට එකලස් කිරීම (එනම්, විග්‍රහ කිරීම ) විධිමත් ලෙස ඒවායින් ඔබ්බට ය.
ඩොනල් ෆෙලෝස්

10

ගැටළුව වන්නේ රීජෙක්ස් යනු සංකීර්ණ තිරිසනෙකු වන අතර, ඔබ ඔබේ ගැටලුව විසඳන්නේ ඔබ රීජෙක්ස් පරිපූර්ණ ලෙස භාවිතා කරන්නේ නම් පමණි. ඔබ එසේ නොකරන්නේ නම්, ඔබ ගැටළු 2 කින් අවසන් වේ: ඔබේ මුල් ගැටලුව සහ රීජෙක්ස්.

ඔබට පේළි සියයක වැඩ කළ හැකි බව ඔබ කියා සිටියත්, රීජෙක්ස් පේළියකට වඩා පැහැදිලි, සංක්ෂිප්ත කේත පේළි 100 ක් හොඳ යැයි ඔබට තර්ක කළ හැකිය.

ඔබට මේ පිළිබඳ යම්කිසි සාක්ෂියක් අවශ්‍ය නම්: ඔබට මෙම SO ක්ලැසික් පරීක්ෂා කළ හැකිය. නැතහොත් SO Regex Tag හරහා පනාව


8
ඔබගේ පළමු වාක්‍යයේ ඇති ප්‍රකාශ කිසිවක් සත්‍ය නොවේ. රීජෙක්ස් විශේෂයෙන් සංකීර්ණ නොවන අතර වෙනත් කිසිදු මෙවලමක් මෙන් එය සමඟ ඇති ගැටලු විසඳීම සඳහා ඔබ එය හොඳින් දැන සිටිය යුතුය. එය FUD පමණි. ඔබේ දෙවන ඡේදය හාස්‍යජනක ය: ඇත්ත වශයෙන්ම ඔබට තර්කය ඉදිරිපත් කළ හැකිය. නමුත් එය හොඳ එකක් නොවේ.
කොන්රාඩ් රුඩොල්ෆ්

1
On කොන්රාඩ් රුඩොල්ෆ් රීජෙක්ස් උත්පාදනය සහ වලංගු කිරීමේ මෙවලම් විශාල ප්‍රමාණයක් තිබීම රීජෙක්ස් යනු සංකීර්ණ යාන්ත්‍රණයක් බව පෙන්වීමට යයි . එය මිනිසුන්ට කියවිය නොහැකි (සැලසුම අනුව) වන අතර යමෙකුට රීජෙක්ස් භාවිතා කරන කේත කැබැල්ලක් වෙනස් කිරීම හෝ ලිවීම සඳහා ප්‍රවාහයේ සම්පූර්ණ වෙනසක් ඇති කළ හැකිය. දෙවන කොටස සම්බන්ධයෙන් ගත් කල, P.SE පිළිබඳ දැනුම සමූහගත කිරීමෙන් සහ "නිදොස් කිරීමේ කේතය ලිවීමට වඩා දෙගුණයක් අමාරුයි" යන කියමනෙන් එය පැහැදිලි වන බව මම සිතමි. එබැවින් ඔබට හැකි තරම් දක්ෂ කේතය ලිවුවහොත්, ඔබට අර්ථ දැක්වීම අනුව එය
නිදොස්

2
එය නිසි තර්කයක් නොවේ. ඔව්, රීජෙක්ස් සංකීර්ණ බව සහතිකයි. නමුත් වෙනත් ක්‍රමලේඛන භාෂාවන් ද එසේමය. රීජෙක්ස් වෙනත් බොහෝ භාෂාවන්ට වඩා සැලකිය යුතු තරම් සංකීර්ණ නොවන අතර රීජෙක්ස් සඳහා පවතින මෙවලම් වෙනත් භාෂා සඳහා සංවර්ධන මෙවලම් මගින් වාමනය කරනු ලැබේ (FWIW මම රීජෙක්ස් සමඟ පුළුල් ලෙස වැඩ කරන අතර මම කිසි විටෙකත් එවැනි මෙවලම් භාවිතා කර නොමැත…). සංකීර්ණ රීජෙක්ස් පවා සමාන නොවන රීජෙක්ස් නොවන විග්‍රහ කිරීමේ කේතයට වඩා සරල බව සරල සත්‍යයකි .
කොන්රාඩ් රුඩොල්ෆ්

On කොන්රාඩ් රුඩොල්ෆ් මම හිතන්නේ එකල සරල වචනයේ අර්ථ දැක්වීම පිළිබඳව අපට මූලික මතභේදයක් තිබේ. මම regex වඩා වැඩි විය හැකි බව ඔබ දෙන්නම් කාර්යක්ෂම හෝ ඊටත් වඩා වැඩි ප්රබල නමුත් මම හිතන්නේ නැහැ සරල ඔබ regex ගැන සිතන විට ඕනෑම කෙනෙකුගේ සිතට එන වචනයක්.
Ampt

ආදිය ඇත්තෙන්ම මම පහසු, අවබෝධ කර ගැනීමට පහසු අදහස් කරන්නේ පවත්වා ගැනීමට සරල ගන්න, සඟවා දෝෂ අඩු අංකය බැලූ බැල්මට සංකීර්ණ regex කැමැත්ත: සමහර විට අපි නමුත් මගේ අර්ථ දැක්වීම ලබන ක්රියාමාර්ග වේ කරන්නේ නෑ ඉතා සරළ බලන්න. නමුත් එම සත්ය කේත සමාන regex නොවන කෑල්ලක් සඳහා. රීජෙක්ස් සරල බව මම කවදාවත් පවසා නැත. මම කියන්නේ ඒවා සරලයි - මම සංසන්දනය කරනවා. එය වැදගත් ය.
කොන්රාඩ් රුඩොල්ෆ්

7

අර්ථයට කොටස් දෙකක් ඇත:

  • පළමුව, ඔබ මුල් ගැටළුව විසඳුවේ නැත.
    නිතිපතා ප්‍රකාශන බොහෝ විට පොදු ගැටලුවලට අසම්පූර්ණ විසඳුම් ලබා දෙන බව මෙයින් අදහස් කෙරේ .
  • දෙවනුව, ඔබ තෝරාගත් විසඳුම හා සම්බන්ධ අමතර දුෂ්කරතා දැන් ඔබ එකතු කර ඇත.
    නිත්‍ය ප්‍රකාශන සම්බන්ධයෙන්, අතිරේක දුෂ්කරතාව බොහෝ විට අදහස් කරන්නේ සංකීර්ණත්වය, නඩත්තු කිරීමේ හැකියාව හෝ නිත්‍ය ප්‍රකාශන සෑදීම හා සම්බන්ධ අමතර දුෂ්කරතාවයන් එය විසඳීමට බලාපොරොත්තු නොවූ ගැටලුවකට ගැලපේ.

7

2014 දී ඔබ එය ඉල්ලා සිටින විට, වර්තමාන සන්දර්භය හා සසඳන විට 1997 සන්දර්භයේ ක්‍රමලේඛන භාෂා මතවාද කෙරෙහි අවධානය යොමු කිරීම සිත්ගන්නා සුළු වනු ඇත. මම මෙහි මෙම විවාදයට ඇතුළු නොවෙමි, නමුත් පර්ල් සහ පර්ල් පිළිබඳ මතයන් බොහෝ සෙයින් වෙනස් වී ඇත.

කෙසේ වෙතත්, 2013 සන්දර්භය තුළ රැඳී සිටීම සඳහා ( de l'eau a coulé sous les ponts depuis ), ජේමි සැවින්ස්කිගේ සෘජු උපුටා දැක්වීමක් වන සුප්‍රසිද්ධ XKCD විකට චිත්‍රයක් භාවිතා කරමින් උපුටා දැක්වීම් නැවත ප්‍රතිනිර්මාණය කිරීම කෙරෙහි අවධානය යොමු කිරීමට මම යෝජනා කරමි :

රීජෙක්ස්, පර්ල් සහ ගැටළු පිළිබඳ XKCD වෙතින් විකට චිත්‍රයකි

එය Zawinski උපුටා සැඳහුම, නිසා මුලින්ම මම මේ හාස්ය තේරුම් ගැනීමට ගැටලු ඇති හා එය ජේ-z, ගීතය රචනා උපුටා, සහ GNU ආශ්රිත program --help -zධජය 2 , ඉතින්, ඒ තරම් සංස්කෘතිය මට එය තේරුම් ගැනීමට විය.

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

එබැවින් ආරම්භක උපුටා දැක්වීම සිත් රිදවන මෙවලම් සමඟ ක්‍රමලේඛනය කිරීම නිසා ඇති වන සැබෑ ජීවිත ගැටලු (වේදනාව?) මත පදනම් වූ උපහාසාත්මක විහිළුවක් ලෙස පෙනේ. මිටියක් පෙදරේරුවෙකුට රිදවිය හැකි සේම, මෙවලම් සමඟ ක්‍රමලේඛනය කිරීම, සංවර්ධකයෙකුට රිදවිය හැකි නම් (මොළය, හැඟීම්) තෝරා ගත හැකි මෙවලම් නොවේ. සමහර විට, වඩාත්ම සුදුසු මෙවලම කුමක්ද යන්න පිළිබඳව විශාල විවාද සිදු වේ, නමුත් එය බොහෝ දුරට නිෂ් less ල හේතුව එය ඔබේ රසය හෝ ඔබේ ක්‍රමලේඛන කණ්ඩායමේ රසය , සංස්කෘතික හෝ ආර්ථික හේතූන් ය. මේ පිළිබඳ තවත් විශිෂ්ට XKCD විකට චිත්‍රයක්:

ක්‍රමලේඛන මෙවලම් විවාද ගැන XKCD වෙතින් විකට චිත්‍රයකි

රීජෙක්ස් ගැන මිනිසුන්ට දැනෙන වේදනාව මට තේරුම් ගත හැකි අතර, රීජෙක්ස් නිර්මාණය කර ඇති දේ සඳහා තවත් මෙවලමක් වඩාත් සුදුසු යැයි ඔවුන් විශ්වාස කරයි. @ Karl-bielefeldt ඔබේ ප්‍රශ්නයට ඉතා ප්‍රකාශිත ලෙස පිළිතුරු දෙන විට විශාල වගකීමක් පැවරෙන අතර රීජෙක්ස් විශේෂයෙන් මේ ගැන සැලකිලිමත් වේ. සංවර්ධකයෙකු ඔහු රීජෙක්ස් සමඟ ගනුදෙනු කරන්නේ කෙසේද යන්න ගැන තැකීමක් නොකරන්නේ නම්, එය පසුව කේතය නඩත්තු කරන පුද්ගලයින්ට වේදනාවක් වනු ඇත.

ඩේමියන් කොන්ව්ගේ පර්ල් හොඳම පරිචයන් (2005 පොතක්) වෙතින් සාමාන්‍ය උදාහරණයක් පෙන්වන උපුටා දැක්වීමකින් උපුටා දැක්වීම් ප්‍රතිනිර්මාණය කිරීම පිළිබඳ මෙම පිළිතුරෙන් මම අවසන් කරමි .

මෙවැනි රටාවක් ලිවීම ඔහු පැහැදිලි කරයි :

m{'[^\\']*(?:\\.[^\\']*)*'}

... මෙවැනි වැඩසටහනක් ලිවීමට වඩා පිළිගත නොහැකි ය :

sub'x{local$_=pop;sub'_{$_>=$_[0
]?$_[1]:$"}_(1,'*')._(5,'-')._(4
,'*').$/._(6,'|').($_>9?'X':$_>8
?'/':$")._(8,'|').$/._(2,'*')._(
7,'-')._(3,'*').$/}print$/x($=).
x(10)x(++$x/10).x($x%10)while<>;

නමුත් එය නැවත ලිවිය හැකිය , එය තවමත් ලස්සන නැත, නමුත් අවම වශයෙන් එය දැන් නොනැසී පවතී.

# Match a single-quoted string efficiently...
m{ '            # an opening single quote
    [^\\']*     # any non-special chars (i.e., not backslash or single quote)
    (?:         # then all of...`
    \\ .        # any explicitly backslashed char
    [^\\']*     #    followed by any non-special chars
    )*          # ...repeated zero or more times
    '           # a closing single quote
}x

හතරැස් හැඩයෙන් යුක්ත කේතය මේ ආකාරයේ වන දෙවන ප්රශ්නය regexes නොව, පැහැදිලි නඩත්තු කළහැකි, කියවිය හැකි ආකාරයෙන් සංයුති කල හැකි බව.


2
/* Multiply the first 10 values in an array by 2. */ for (int i = 0 /* the loop counter */; i < 10 /* continue while it is less than 10 */; ++i /* and increment it by 1 in each iteration */) { array[i] *= 2; /* double the i-th element in the array */ }
5gon12eder

6

පරිගණක විද්‍යාවෙන් ඔබ ඉගෙන ගත යුතු එක් දෙයක් තිබේ නම් එය චොම්ස්කි ධූරාවලියයි . නිත්‍ය ප්‍රකාශනවල ඇති සියලුම ගැටලු පැමිණෙන්නේ සන්දර්භය රහිත ව්‍යාකරණ විග්‍රහ කිරීමට ගත් උත්සාහයන් නිසා යැයි මම කියමි. සීඑෆ්ජී හි කූඩු මට්ටම් සඳහා ඔබට සීමාවක් පැනවිය හැකි විට (හෝ ඔබට සීමාවක් පැනවිය හැකි යැයි සිතන විට), ඔබට දිගු හා සංකීර්ණ නිත්‍ය ප්‍රකාශන ලැබේ.


1
ඔව්! සීඑස් පසුබිමේ එම කොටස නොමැතිව නිතිපතා ප්‍රකාශන ඉගෙන ගන්නා පුද්ගලයින්ට රීජෙක්ස් ගණිතමය වශයෙන් කළ නොහැකි සමහර දේවල් ඇති බව සැමවිටම නොතේරේ.
බෙන්සාඩෝ

5

නිත්‍ය ප්‍රකාශන පූර්ණ පරිමාණයේ විග්‍රහ කිරීමට වඩා ටෝකනකරණය සඳහා වඩාත් සුදුසු වේ.

එහෙත්, ක්‍රමලේඛකයන්ට විග්‍රහ කිරීමට අවශ්‍ය පුදුම සහගත විශාල දේවල් සමූහයක් සාමාන්‍ය භාෂාවකින් විග්‍රහ කළ හැකිය (නැතහොත්, වඩාත් නරක, සාමාන්‍ය භාෂාවෙන් විග්‍රහ කළ හැකි අතර ඔබ තව ටිකක් කේතයක් ලිවුවහොත් ...).

එබැවින් "ආහා, මට පෙළ වෙන්කර ගැනීමට අවශ්‍යයි, මම නිත්‍ය ප්‍රකාශනයක් භාවිතා කරමි" යනුවෙන් පුරුදු වී සිටින්නේ නම්, එම මාර්ගයෙන් බැසීම පහසුය, ඔබට තල්ලු-ස්වයංක්‍රීය ස්වයංක්‍රීය යන්ත්‍රයකට, සීඑෆ්ජී පාර්සර් හෝ වෙනත් යමක් අවශ්‍ය වූ විට ඊටත් වඩා ප්‍රබල ව්‍යාකරණ. එය සාමාන්‍යයෙන් කඳුළු වලින් අවසන් වේ.

ඉතින්, මම හිතන්නේ උපුටා දැක්වීම රීජෙක්ස් වලට එතරම් කම්මැලි නොවේ, ඒවායේ භාවිතය ඇත (සහ හොඳින් භාවිතා කර ඇත, ඒවා ඇත්තෙන්ම ඉතා ප්‍රයෝජනවත් වේ), නමුත් රීජෙක්ස් මත අධික ලෙස රඳා පැවතීම (හෝ, විශේෂයෙන්, ඒවා විවේචනාත්මකව තෝරා ගැනීම) .


3

jwz එම උපුටා දැක්වීම සමඟ ඔහුගේ රොකර් එකෙන් ඉවතට. නිත්‍ය ප්‍රකාශන ඕනෑම භාෂා අංගයකට වඩා වෙනස් නොවේ - ඉස්කුරුප්පු කිරීම පහසුය, අලංකාර ලෙස භාවිතා කිරීමට අපහසුය, විටෙක බලවත්ය, විටෙක නුසුදුසුය, බොහෝ විට හොඳින් ලේඛනගත කර ඇත, බොහෝ විට ප්‍රයෝජනවත් වේ.

පාවෙන ලක්ෂ්‍ය අංක ගණිතය, වසා දැමීම්, වස්තු-දිශානතිය, අසමමුහුර්ත I / O හෝ ඔබට නම් කළ හැකි වෙනත් ඕනෑම දෙයකට මෙයම කිව හැකිය. ඔබ කරන්නේ කුමක්දැයි ඔබ නොදන්නේ නම්, ක්‍රමලේඛන භාෂාවන් ඔබව දුකට පත් කළ හැකිය.

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

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


1
FWIW, පාවෙන ලක්ෂ්‍ය අංක ගණිතය RE වලට වඩා ව්‍යාකූල නමුත් සරල ලෙස පෙනේ. පරෙස්සම් වන්න! (අවම වශයෙන් උපක්‍රමශීලී REs භයානක ලෙස පෙනේ.)
ඩොනල් ෆෙලෝස්

3

අභ්‍යන්තර ගූගල් කේත සටහනකින් ප්‍රතිනිෂ්පාදනය කරන ලද බ්ලොග් සටහනක සුප්‍රසිද්ධ රොබ් පයික් විසින් මේ සඳහා මගේ ප්‍රියතම, ගැඹුරු පිළිතුර ලබා දී ඇත: http://commandcenter.blogspot.ch/2011/08/regular-expressions-in-lexing- and.html

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

නිත්‍ය ප්‍රකාශන ලිවීමට අපහසුය, හොඳින් ලිවීමට අපහසුය, සහ වෙනත් තාක්ෂණයන්ට සාපේක්ෂව මිල අධික විය හැකිය ... අනෙක් අතට, ලෙක්සර්ස් නිවැරදිව ලිවීමට තරමක් පහසුය (සංයුක්ත නොවේ නම්), සහ පරීක්ෂා කිරීමට ඉතා පහසුය. අක්ෂරාංක හඳුනාගැනීම් සොයා ගැනීම සලකා බලන්න. Regexp ("[a-ZA-Z _] [a-ZA-Z_0-9] *" වැනි දෙයක්) ලිවීම එතරම් අපහසු නැත, නමුත් සරල ලූපයක් ලෙස ලිවීමට එතරම් අපහසු නොවේ. කෙසේ වෙතත්, ලූපයේ ක්‍රියාකාරිත්වය වඩා ඉහළ අගයක් ගන්නා අතර ආවරණ යටතේ අඩු කේතයක් ඇතුළත් වේ. සාමාන්‍ය ප්‍රකාශන පුස්තකාලයක් යනු විශාල දෙයකි. හඳුනාගැනීම් විග්‍රහ කිරීම සඳහා එකක් භාවිතා කිරීම හරියට කිරි සඳහා ගබඩාවට යාමට ෆෙරාරි භාවිතා කිරීම වැනිය.

ඔහු ඊට වඩා බොහෝ දේ පවසයි, නිත්‍ය ප්‍රකාශන ප්‍රයෝජනවත් යැයි තර්ක කරයි, උදා: පෙළ සංස්කාරකවරුන්ගේ රටාවන් ඉවත දැමිය හැකි නමුත් ඒවා සම්පාදනය කරන ලද කේත වල කලාතුරකින් භාවිතා කළ යුතුය. එය කියවීම වටී.


0

මෙය ඇලන් පර්ලිස්ගේ අභිලේඛනය # 34 හා සම්බන්ධ වේ:

මෙම නූල සම්පූර්ණයෙන්ම දත්ත ව්‍යුහයක් වන අතර එය සම්මත වූ සෑම තැනකම ක්‍රියාවලියේ බොහෝ අනුපිටපත් ඇත. තොරතුරු සැඟවීමට එය කදිම වාහනයකි.

එබැවින් ඔබ ඔබේ දත්ත ව්‍යුහය ලෙස අක්ෂර මාලාව තෝරා ගන්නේ නම් (සහ, එය හැසිරවීමට ඇල්ගොරිතම ලෙස ස්වාභාවිකවම රීජෙක්ස් මත පදනම් වූ කේතය), එය ක්‍රියාත්මක වුවද ඔබට ගැටළුවක් ඇත: දත්ත නුසුදුසු ලෙස නිරූපණය කිරීම වටා ඇති නරක නිර්මාණය දිගු කිරීම සහ අකාර්යක්ෂම කිරීම.

කෙසේ වෙතත්, බොහෝ විට එය ක්‍රියා නොකරයි: මුල් ගැටළුව විසඳී නැත, එබැවින් ඔබට ගැටළු දෙකක් තිබේ.


0

ඉක්මන් හා අපිරිසිදු පෙළ විග්‍රහ කිරීම සඳහා රීජෙක්ස් බහුලව භාවිතා වේ. ඒවා සරල නූල් ගැළපුමකට වඩා ටිකක් සංකීර්ණ රටා ප්‍රකාශ කිරීම සඳහා විශිෂ්ට මෙවලමකි.

කෙසේවෙතත්, රිජෙක්ස් වඩාත් සංකීර්ණ වන විට සර්වරල් ගැටළු ඔවුන්ගේ හිස ඔසවයි.

  1. රීජෙක්ස් වල වාක්‍ය ඛණ්ඩය සරල ගැලපීම සඳහා ප්‍රශස්තිකරණය කර ඇත, බොහෝ අක්ෂර තමන්ටම ගැලපේ. එය සරල රටාවන් සඳහා ඉතා සුදුසු නමුත් ඔබ කූඩු මට්ටම් දෙකකට වඩා අවසන් කළ පසු ඔබ අවසන් වන්නේ හොඳින් ව්‍යුහගත කේතයට වඩා රේඛීය ශබ්දය වැනි දෙයක් සමඟ ය. කේතයේ ව්‍යුහය පෙන්වීම සඳහා ඔබට ඉන්ඩෙන්ටේෂන් සහ අදහස් දැක්වීම් සහිත සංයුක්ත නූල් මාලාවක් ලෙස රීජෙක්ස් ලිවිය හැකි යැයි මම සිතමි, නමුත් එය ඇත්ත වශයෙන්ම සිදුවීම දුර්ලභ බව පෙනේ.
  2. රීජෙක්ස් වලට හොඳින් ගැලපෙන්නේ ඇතැම් වර්ගවල පෙළ ගැලපීම් පමණි. බොහෝ විට ඔබ යම් ආකාරයක සලකුණු භාෂාවක් වැඩ කිරීම සඳහා ඉක්මන් හා අපිරිසිදු රීජෙක්ස් පදනම් කරගත් විග්‍රහයක් ලබා ගන්නා බව පෙනේ, නමුත් පසුව ඔබ තවත් මුල්ලක අවස්ථා ආවරණය කිරීමට උත්සාහ කරන අතර රීජෙක්ස් වඩ වඩාත් සංකීර්ණ හා අඩු හා අඩු කියවිය හැකි බව ඔබට පෙනේ.
  3. රීජෙක්ස් වල කාල සංකීර්ණතාව නොපැහැදිලි විය හැකිය. නොගැලපෙන සමහර අවස්ථා වලදී එය ගැලපෙන විට විශිෂ්ට ලෙස ක්‍රියා කරන නමුත් O (2 ^ n) සංකීර්ණතාවයක් ඇති රටාවකින් අවසන් වීම එතරම් අපහසු නොවේ .

මේ අනුව, පෙළ සැකසීමේ ගැටලුවකින් ආරම්භ කිරීම, ඒ සඳහා නිත්‍ය ප්‍රකාශන යෙදීම සහ ගැටලු දෙකකින් අවසන් වීම, ඔබ විසඳීමට උත්සාහ කළ මුල් ගැටළුව සහ විසඳීමට උත්සාහ කරන නිත්‍ය ප්‍රකාශන සමඟ කටයුතු කිරීම (නමුත් නිවැරදිව විසඳීම නොවේ) මුල් ගැටළුව.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.