Pers තිහාසික ඉදිරිදර්ශනය
සාමාන්ය ප්රකාශනවල මූලාරම්භය ගැන විකිපීඩියා ලිපිය තරමක් සවිස්තරාත්මක වේ (ක්ලීන්, 1956). මුල් කාරක රීති පමණක් සාපේක්ෂව සරල *
, +
, ?
, |
හා ජිනිවා හි (...)
. එය මිනිස්සු නෙවෙයි (විය හා විධිමත් භාෂා මිනිස්සු නෙවෙයි ගණිතමය අංකන සමග ප්රකාශ කළ නැඹුරු නිසා, හොඳින් කියවිය හැකි වේ, දෙකක් අවශ්යයෙන්ම විරුද්ධ නැත).
පසුව, කාරක රීති හා හැකියාවන් කර්තෘ පරිණාමය හා සමග වර්ධනය වී perl බසට ලං නිර්මාණය මිනිස්සු නෙවෙයි වෙන්න උත්සාහ කරන ලද, ( "පොදු ඉදිකිරීම් කෙටි විය යුතුයි" ). මෙය වාක්ය ඛණ්ඩය බොහෝ සංකීර්ණ කර ඇති නමුත් මිනිසුන් දැන් සාමාන්ය ප්රකාශන වලට හුරුවී ඇති අතර ඒවා ලිවීමට (කියවන්නේ නැතිනම්) හොඳ බව සලකන්න. ඒවා සමහර විට ලිවීමට පමණක් වන බැවින් ඒවා දිගු වන විට ඒවා සාමාන්යයෙන් නිවැරදි මෙවලම නොවන බව අඟවයි.
නිතිපතා ප්රකාශන අපයෝජනයට ලක්වන විට කියවිය නොහැක.
නූල් මත පදනම් වූ නිත්ය ප්රකාශන වලින් ඔබ්බට
විකල්ප වාක්ය ඛණ්ඩ ගැන කතා කරමින්, අපි දැනටමත් පවතින එකක් දෙස බලමු ( cl-ppcre , Common Lisp හි ). ඔබගේ දිගු නිත්ය ප්රකාශනය ppcre:parse-string
පහත පරිදි විග්රහ කළ හැකිය :
(let ((*print-case* :downcase)
(*print-right-margin* 50))
(pprint
(ppcre:parse-string "^(?:([A-Za-z]+):)?(\\/{0,3})(0-9.\\-A-Za-z]+)(?::(\\d+))?(?:\\/([^?#]*))?(?:\\?([^#]*))?(?:#(.*))?$")))
... සහ පහත දැක්වෙන ස්වරූපයෙන් ප්රති results ල:
(:sequence :start-anchor
(:greedy-repetition 0 1
(:group
(:sequence
(:register
(:greedy-repetition 1 nil
(:char-class (:range #\A #\Z)
(:range #\a #\z))))
#\:)))
(:register (:greedy-repetition 0 3 #\/))
(:register
(:sequence "0-9" :everything "-A-Za-z"
(:greedy-repetition 1 nil #\])))
(:greedy-repetition 0 1
(:group
(:sequence #\:
(:register
(:greedy-repetition 1 nil :digit-class)))))
(:greedy-repetition 0 1
(:group
(:sequence #\/
(:register
(:greedy-repetition 0 nil
(:inverted-char-class #\? #\#))))))
(:greedy-repetition 0 1
(:group
(:sequence #\?
(:register
(:greedy-repetition 0 nil
(:inverted-char-class #\#))))))
(:greedy-repetition 0 1
(:group
(:sequence #\#
(:register
(:greedy-repetition 0 nil :everything)))))
:end-anchor)
මෙම වාක්ය ඛණ්ඩය වඩාත් වාචික වන අතර, ඔබ පහත දැක්වෙන අදහස් දෙස බැලුවහොත්, කියවිය යුතු නොවේ. එබැවින් ඔබට අඩු සංයුක්ත වාක්ය ඛණ්ඩයක් ඇති බැවින් දේවල් ස්වයංක්රීයව පැහැදිලි වනු ඇතැයි නොසිතන්න .
කෙසේ වෙතත්, ඔබ ඔබේ නිත්ය ප්රකාශන සමඟ කරදර ඇති කිරීමට පටන් ගන්නේ නම්, ඒවා මෙම ආකෘතියට හරවා ගැනීම ඔබේ කේතය තේරුම් ගැනීමට සහ නිදොස් කිරීමට උපකාරී වේ. මෙය නූල් මත පදනම් වූ ආකෘති වලට වඩා එක් වාසියක් වන අතර එහිදී තනි අක්ෂර දෝෂයක් හඳුනා ගැනීම දුෂ්කර විය හැකිය.
මෙම වාක්ය ඛණ්ඩයේ ඇති ප්රධාන වාසිය නම් නූල් මත පදනම් වූ කේතන ක්රමයක් වෙනුවට ව්යුහාත්මක ආකෘතියක් භාවිතයෙන් නිත්ය ප්රකාශන හැසිරවීමයි. එමඟින් ඔබේ වැඩසටහනේ වෙනත් ඕනෑම දත්ත ව්යුහයක් වැනි ප්රකාශන රචනා කිරීමට සහ ගොඩ නැගීමට ඔබට ඉඩ සලසයි . මම ඉහත සින්ටැක්ස් භාවිතා කරන විට, මෙය සාමාන්යයෙන් මට කුඩා කොටස් වලින් ප්රකාශන තැනීමට අවශ්ය නිසාය ( මගේ කෝඩ් ගොල්ෆ් පිළිතුරද බලන්න ). ඔබේ උදාහරණය සඳහා, අපි 1 ලිවිය හැකිය :
`(:sequence
:start-anchor
,(protocol)
,(slashes)
,(domain)
,(top-level-domain) ... )
නූල් මත පදනම් වූ නිත්ය ප්රකාශන ද රචනා කළ හැකිය. කෙසේ වෙතත්, විය හැකියි string උපාමාරු සීමාවන් තියෙනවා අවුල් ඇති කේතය (නැති කුරුල්ලන් ලැග සිටින ගැටළු, මෙන් නොව backticks එදිරිව ගැන හිතන්න $(...)
, ද, පලා චරිත ඔබට හිසරදය දිය හැක bash දී).
ඉහත පෝරමය මඟින් (:regex "string")
ආකෘති වලට ඉඩ ලබා දෙන අතර එමඟින් ඔබට ගස් සමඟ දැඩි අංක මිශ්ර කළ හැකිය. මේ සියල්ලම IMHO හොඳ කියවීමේ හැකියාව සහ සංයුක්තතාවයට යොමු කරයි; එය ඩෙල්නන් විසින් ප්රකාශ කරන ලද ගැටළු තුනට වක්රව ආමන්ත්රණය කරයි (එනම් සාමාන්ය ප්රකාශන භාෂාවෙන් නොවේ).
නිගමනය කිරීමට
බොහෝ අරමුණු සඳහා, දැඩි අංකනය ඇත්ත වශයෙන්ම කියවිය හැකිය. පසුගාමී ලුහුබැඳීම් ආදිය සම්බන්ධ දීර් extended අංකන සමඟ කටයුතු කිරීමේදී දුෂ්කරතා ඇති නමුත් ඒවා භාවිතා කිරීම කලාතුරකින් යුක්ති සහගත නොවේ. අනවශ්ය ලෙස නිත්ය ප්රකාශන භාවිතා කිරීම කියවිය නොහැකි ප්රකාශන වලට හේතු විය හැක.
නිත්ය ප්රකාශන නූල් ලෙස කේතනය කිරීම අවශ්ය නොවේ. නිත්ය ප්රකාශන තැනීමට සහ රචනා කිරීමට ඔබට උදව් කළ හැකි පුස්තකාලයක් හෝ මෙවලමක් ඔබ සතුව තිබේ නම්, ඔබ නූල් හැසිරවීම් හා සම්බන්ධ බොහෝ දෝෂ මඟහරවා ගනු ඇත.
විකල්පයක් ලෙස, විධිමත් ව්යාකරණ වඩාත් කියවිය හැකි අතර උප ප්රකාශන නම් කිරීම හා සාරාංශ කිරීම වඩා හොඳය. පර්යන්ත සාමාන්යයෙන් සරල නිත්ය ප්රකාශන ලෙස ප්රකාශ වේ.
1. නිත්ය ප්රකාශන යෙදුමක නියතයන් වන බැවින් කියවීමේ වේලාවේදී ඔබේ ප්රකාශන ගොඩනඟා ගැනීමට ඔබ කැමති විය හැකිය. බලන්න create-scanner
සහ load-time-value
:
'(:sequence :start-anchor #.(protocol) #.(slashes) ... )