JavaRush /Java Blog /Random-TK /RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ä...
Artur
Dereje
Tallinn

RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim. 4-nji bölüm

Toparda çap edildi
RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim. 1-nji bölüm RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim. 2-nji bölüm, yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim. 3-nji bölüm Bu soňky bölüm, ortada esasan yzygiderli aňlatma ussatlary tarapyndan ulanylýan zatlara degip geçer. Emma öňki böleklerden alnan material size aňsat boldy, şeýlemi? Diýmek, bu materialy şol bir aňsatlyk bilen dolandyryp bilersiňiz! Asyl bu ýerde RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim.  4-nji bölüm <h2> 16-njy ädim: ele alman toparlar (?:)</h2> RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim.  4-nji bölümÖňki ädimdäki iki mysalda, hakykatdanam zerur däl teksti alýardyk. Faýl ölçegleri meselesinde, faýl ululyklarynyň birinji belgisinden öň boşluklary ele aldyk we CSV meselesinde her belligiň arasyndaky dykyzlary aldyk. Bu nyşanlary surata düşürmek hökman däl, ýöne yzygiderli aňlatmalarymyzy düzmek üçin olary ulanmalydyrys. Topary ele almazdan ulanmak üçin iň amatly wariantlar , (?:). Tutulmaýan topar, edil eşidilişi ýaly edýär - nyşanlaryň toparlanmagyna we yzygiderli aňlatmalarda ulanylmagyna mümkinçilik berýär, ýöne sanly toparda tutmaýar:
nagyş: (?: ") ([^"] +) (?: ") 
setir: Men diňe " şu sitatalaryň içindäki teksti " isleýärin .             gabat 
gelýänler    
:             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^    
. _ _ Näme üçin beýle etmeli? Esasy zat, yzygiderli aňlatma hereketlendirijileriniň yzygiderli aňlatmalaryňyzda kesgitlenen surata düşüriş toparlaryndan teksti dikeltmäge mümkinçilik berýär. Gerek däl goşmaça nyşanlary surata düşüriş toparlarymyza goşmazdan kesip bilsek, teksti soňra derňemegi we dolandyrmagy aňsatlaşdyrar. Ine, CSV derňewçisini öňki ädimden nädip arassalamaly:
nagyş: (?: ^ |,) \ s * (?: \ "([^",] *) \ "| ([^",] *)) 
setir:   a , " b ", " cd ", e , f , " gh ", dfgi ,, k , "", l 
gabat gelýär: ^ ^ ^^^ ^ ^ ^^^ ^^^^ ^ ^ 
topar:    2 1 111 2 2 111 2222 2 2    
. _ _ (^|,)_ (?:^|,)_ Ikinjiden, ele salmaýan toparyň içinde tutma toparyny höwürtgedik. Mysal üçin, belli bir tertipde peýda bolmak üçin bir topar nyşan gerek bolsa, bu peýdalydyr, ýöne diňe şol nyşanlaryň bir bölegi hakda alada edýärsiňiz. Biziň ýagdaýymyzda, sitatalarda peýda bolmagy üçin sitata berilmeýän simwollar we dykyz belgiler gerekdi [^",]*, ýöne aslynda sitata nyşanlarynyň özleri gerek däldi, şonuň üçin olary ele almak zerurlygy ýokdy. Ahyrynda, <mark> bellik </mark> ýokardaky mysalda nyşanlaryň kwe l. Sitatlar ""gözlenýän substring, ýöne sitatalaryň arasynda nyşan ýok, şonuň üçin gabat gelýän substringde simwol ýok (nol uzynlyk). <h3> Bilimimizi birleşdirmelimi? Ine, bu meselede bize kömek etjek iki ýarym mesele bar: </h3> ele düşmeýän toparlary (we toparlary, we häsiýet synplaryny we ş.m.) ulanyp, setirde diňe dogry formatlanan faýl ululyklaryny alýan yzygiderli aňlatma ýazyň. aşakda:
nagyş:
setir:   6.6KB 1..3KB 12KB 5G 3.3MB KB .6.2TB 9MB .
gabat gelýär: ^^^^^ ^^^^^ ^^^^^^ ^^^^ 
topar:    11111 1111 11111 111    
( Çözgüt ) HTML açyş bellikleri başlaýar <we soňlanýar >. HTML ýapylyş bellikleri nyşanlaryň yzygiderliligi bilen başlaýar </we nyşan bilen gutarýar >. Belligiň ady bu nyşanlaryň arasynda bar. Aşakdaky belliklerde diňe atlary almak üçin yzygiderli aňlatma ýazyp bilersiňizmi? (Bu meseläni ele almaýan toparlary ulanman çözüp bilersiňiz. Bu iki ýoly çözmäge synanyşyň! Bir gezek toparlar bilen we bir gezek.)
nagyş:
setir:   <p> </span> <div> </kbd> <link> 
gabat gelýär: ^^^ ^^^^^^ ^^^^^ ^^^^^^ ^^^^^^ 
topar:    1 1111 111 111 1111    
( Surata düşmeýän toparlary ulanmak arkaly çözgüt ) ( ele düşmeýän toparlary\N ulanman RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim.  4-nji bölümçözgüt ) ýürek agyrysyna eltýär, bu soňky mysal, adaty sözlemleriň başga bir (käwagt) peýdaly aýratynlygy: arka ýazgylary. Arka baglanyşyklar, şol bir teksti iki gezek surata düşürip boljak toparlary gaýtalamak ýalydyr. Emma bir möhüm tarapda tapawutlanýar - diňe şol bir teksti, häsiýeti boýunça ele alarlar. Gaýtalanýan topar bize şuňa meňzeş bir zady ele almaga mümkinçilik berer:
nagyş: (he (?: [az]) +) 
setir:   heyabcdefg hey hey heyellow heyyyyyyyy 
gabat gelýär: ^^^^^^^^^^ ^^^ ^^^^ ^^^^^^^^^ ^^^^^^^^ 
topar:    1111111111 111 1111 11111111 11111111111    
( Mysal ) ... soň arka baglanyşyk diňe şu gabat geler:
nagyş: (ol ([az]) (\ 2+)) 
setir: heyabcdefg hey hey heyellow heyyyyyyyy 
gabat gelýär:                              ^^^^^^^^^^^ 
topar:                                 11233333333    
. _ _ Mysal üçin, gabat gelýän HTML belliklerini tapmaga synanyşmak üçin arka baglanyşyk ulanyp bileris:
nagyş: <(\ w +) [^>] *> [^ <] + <\ / \ 1> 
setir:   <span style = "color: red"> heý </span> 
gabat gelýär: ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ 
_    _    
( Mysal ) <mark> Üns beriň </mark> munuň gaty ýönekeýleşdirilen mysaldygyny we HTML derňewçisine esaslanýan yzygiderli aňlatma ýazmazlygy maslahat berýärin. Bu gaty çylşyrymly sintaksis we sizi kesel eder. Ady tutulan toparlar arka baglanyşyklara gaty meňzeýär, şonuň üçin bu ýerde gysgaça maglumat bererin. Yzky ýazgylar bilen atlandyrylan tutma toparynyň arasyndaky ýeke-täk tapawut ... ady tutulan toparyň ady bar:
nagyş: <(? <tag> \ w +) [^>] *> [^ <] + <\ / (? P = tag)> </tag> 
setir:   <span style = "color: red"> hey < / span> gabat 
gelýänler    
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^    
. _ _ ..) ýa-da (? P'name '...) (Python-gabat gelýän yzygiderli aňlatma). Iki wersiýany hem goldaýan PCRE (Perl Compatible Regular Expression) ulanýandygymyz sebäpli, ikisini hem şu ýerde ulanyp bileris. (Java 7 .. P = ady) (Python). Againene-de PCRE bu dürli wariantlaryň hemmesini goldaýar. Ady tutulan toparlar hakda has giňişleýin maglumaty şu ýerden okap bilersiňiz , ýöne bu olar hakda hakykatdanam bilmeli zatlaryňyzyň köpüsi. <h3> Bize kömek etmek meselesi: </h3> rememberadyma düşmegine kömek etmek üçin arka baglanyşyklary ulanyň ... ummm ... bu adamyň ady.
nagyş:
setir: "Salam meniň adym Joe." [soň] "Şol ýigidiň ady näme? Jo ?"
gabat gelýänler:        ^^^^^^^^^^^^^^^ ^ 
topar:                  111    
( Çözgüd ) RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim.  4-nji bölüm_ 16-njy ädime çenli hemme zady ýygy-ýygydan ulanýaryn. Theseöne bu soňky birnäçe ädim diňe regex-den gaty çylşyrymly sözlemlere gabat gelýän adamlar üçin. Başgaça aýdylanda, yzygiderli aňlatmagyň ussatlary. "Garaşmak" we "Yza seretmek" gaty çylşyrymly bolup görünse-de, hakykatdanam gaty çylşyrymly däl. Olary öň ele almaýan toparlar bilen edişimize meňzeş bir zat etmäge mümkinçilik berýär - gabat gelmek isleýän hakyky tekstimiziň öňünden ýa-da derrew haýsydyr bir tekstiň bardygyny barlaň. Mysal üçin, diňe adamlaryň halaýan zatlarynyň atlaryna gabat gelmek isleýäris, ýöne diňe muňa höwesli bolsalar (diňe sözlemini sözlem bilen gutarsalar). Şular ýaly bir zat edip bilerdik:
nagyş: (\ w +) (? =!) 
setir: Men stoly halaýaryn. Men ştapel üçin minnetdar. Çyrany gowy görýärin !
gabat gelýär:                                           ^^^^ 
topar:                                              1111    
( Mysal(\w+) ) aboveokardaky ýazgy toparynyň , adatça bölekdäki sözleriň haýsydyr birine gabat gelýän, diňe lampa sözüne gabat gelýändigini görüp bilersiňiz . Oňyn garamak, (?=!)diňe gutarýan yzygiderliligi deňeşdirip biljekdigimizi aňladýar !, ýöne aslynda bellik belgisiniň häsiýetine laýyk gelmeýär. Bu möhüm tapawut, sebäbi ele salmaýan toparlar bilen biz häsiýeti deňeşdirýäris, ýöne ele almaýarys. Gözler we gözler bilen yzygiderli aňlatma gurmak üçin bir nyşan ulanýarys, ýöne soňam özi bilen deňeşdirmeýäris. Soňra yzygiderli aňlatmamyzda gabat gelip bileris. Gözleriň we görnüşleriň dört görnüşi bar: oňyn görnüş (? = ...), otrisatel görnüş (?! ...), polo positiveitel göz (? <= ...) we negatiw görnüş (? <!. ..) . Özlerine meňzeýän zatlaryny edýärler - polo positiveitel görnüş we serediş yzygiderli aňlatma hereketlendirijisine diňe daş keşbiniň / gözlegiň içindäki tekst hakykatda gabat gelende gabat gelmegini dowam etdirmäge mümkinçilik berýär. Ativearamaz serediş we serediş tersine hereket edýär - regex-iň diňe göz aýlaýyş / gözleg görnüşindäki tekst gabat gelmedik ýagdaýynda gabat gelmegine mümkinçilik berýär. Mysal üçin, usul atlaryny diňe işleýän obýektine däl-de, diňe usul yzygiderliligine gabat getirmek isleýäris. Bu ýagdaýda her usulyň ady a-dan öň bolmaly .. Simpleönekeý yza seredip yzygiderli aňlatma bu ýerde kömek edip biler:
nagyş: (? <= \.) (\ w +) 
setir: myArray. flatMap.aggregate.summarise.print !
gabat gelýänler    
:         ^^^^^^^ ^^^^^^^^         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^    
( Mysal ) aboveokardaky tekstde söz nyşanlarynyň yzygiderliligine gabat gelýäris \w+, ýöne diňe harpdan öň bolsa .. Tutulmaýan toparlary ulanyp, şuňa meňzeş bir zada ýetip bilerdik, ýöne netije birneme bulaşyk:
nagyş: (?: \.) (\ w +) 
setir: myArray .flatMap.aggregate.summarise.print !
gabat gelýänler    
:        ^^^^^^^^ ^^^^^^^^         ^^^^^^^^^^^^^^^^^^^^^^^^    
( Mysal ) Has gysga bolsa-da, bize gerek däl nyşanlara gabat gelýär. Bu mysal ähmiýetsiz ýaly bolup görünse-de, göz aýlamak we göz aýlamak hakykatdanam adaty sözlerimizi arassalamaga kömek edip biler. <h3> Pellehana çenli gaty az! Aşakdaky 2 mesele bize 1 ädim ýakynlaşdyrar: </h3> ativearamaz serediş (? <! ...) adaty aňlatma motoryna diňe negatiw gözlegiň içindäki tekst ýok bolsa, tapmaga synanyşmaga mümkinçilik berýär. gabat gelýänini tapmaly tekstiň galan bölegine çenli görkezilýär. Mysal üçin, konferensiýa gatnaşýan aýallaryň diňe familiýalaryna gabat gelmek üçin yzygiderli aňlatma ulanyp bilerdik. Munuň üçin adamyň familiýasynyň a bilen ýazylmaýandygyna göz ýetirmek isleýäris Mr.. Munuň üçin yzygiderli aňlatma ýazyp bilersiňizmi? (Familiýalary azyndan dört simwol diýip çaklamak bolar.)
nagyş:
setir: jenap Braun, hanym Smit , hanym Jones , Miss Deýzi , jenap Greenaşyl
gabat gelýär:                ^^^^^ ^^^^^ ^^^^^ 
topar:                   11111 11111 11111    
( Çözgüt ) Maglumatlar bazasyny arassalaýarys diýýäris we göterimleri görkezýän maglumatlar sütünimiz bar. Gynansagam, käbir adamlar [0.0, 1.0] aralygynda sanlary onluk baha hökmünde ýazdylar, beýlekiler [0.0%, 100.0%] aralygynda göterim ýazdylar, beýlekiler göterim bahalaryny ýazdylar %. Negativearamaz görnüşi (?! ...) ulanyp, diňe göterim bolmaly, ýöne sanlary ýitirýän bahalary belläp bilersiňizmi %? Bular 1.00-den has ýokary bolmaly, ýöne yzarlamazdan %. (Hiç bir san onluk nokatdan öň ýa-da soň iki sandan köp bolup bilmez.) <mark> Bellik </mark> bu çözgüdiň gaty kyndygyny . Bu meseläni meniň jogabymy görmän çözüp bilýän bolsaňyz, onda eýýäm yzygiderli aňlatmalarda ägirt uly başarnyklaryňyz bar!
nagyş:
setir: 0.32 100.00 5.6 0.27 98% 12.2% 1.01 0.99% 0.99 13.13 1.10 
gabat gelýär:      ^^^^^^ ^^^ ^^^^ ^^^^^ ^^^^ 
topar:         111111 111 1111 11111 1111    
( Çözgüt ) <h2> 19-njy ädim: Adaty aňlatmalardaky şertler </h2> RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim.  4-5-nji bölümIndi adamlaryň köpüsiniň yzygiderli aňlatmalary ulanmajak derejesine ýetdik. Simpleönekeý yzygiderli aňlatmalar üçin ulanylyş ýagdaýlarynyň 95% -ini öz içine aldyk we 19-njy we 20-nji ädimlerde edilen zatlaryň hemmesi adatça awk ýa-da sed (ýa-da umumy maksatly programma dili) ýaly has doly tekstli manipulýasiýa dili bilen amala aşyrylýar. Saidagny, adaty bir sözlemiň hakykatdanam näme edip biljekdigini bilmek üçin dowam edeliň. Yzygiderli aňlatmalar Týuring doly bolmasa -da , käbir yzygiderli aňlatma hereketlendirijileri doly programmirleme diline meňzeş aýratynlyklary hödürleýär. Şeýle aýratynlyklaryň biri "şert". Regex şertleri, saýlanan şahanyň öňki ädimde öwrenen "sabyrsyzlyk bilen" ýa-da "yzyna seret" bilen kesgitlenýän ýerinde başga-başga sözlemlere rugsat berýär. Mysal üçin, seneleriň sanawynda diňe dogry ýazgylara gabat gelmek isläp bilersiňiz:
nagyş: (? <= Fewral) ([1-2] [0-9]) | (? <= Mar) ([1-2] [0-9] | 3 [0-1]) 
setir: Işlenen seneler : 28- nji fewral , 29-njy fewral , 30-njy fewral, 30- njy mart , 31- nji mart  
oýunlary:                   ^^ ^^ ^^ ^^ 
topar:                      11 11 22 22    
( Mysal ) <mark> Bellik </mark> ýokardaky toparlaryň hem aý boýunça indekslenýändigini. 12 aýyň dowamynda yzygiderli aňlatma ýazyp, diňe ýylyň senesi boýunça indekslenen toparlara birleşdirilen diňe dogry seneleri alyp bilerdik. Aboveokardakylar, "Fewral" sanyň öňüsyrasynda (we ikinjisi üçin şuňa meňzeş) diňe birinji topardaky oýunlary gözlejek görnüşli gurluşy ulanýar. Onlyöne diňe fewral aýynda ýörite gaýtadan işlemek islesek näme etmeli? "Eger san" Fewral "-dan öň bolsa, muny et, ýogsam başga zady et". Şertleriň muny ýerine ýetirmegi:
nagyş: (? (? <= Fewral) ([1-2] [0-9]) | ([1-2] [0-9] | 3 [0-1])) 
setir: Işlenen senesi: 28- nji fewral , 29- njy fewral , 30-njy fewral, 30-njy mart , 31-nji mart  
oýunlary:                   ^^ ^^ ^^ ^^ 
topar:                      11 11 22 22    
. _ _ Aboveokardaky mysalda (if) ýaly ýazylýar (?<=Feb). 29-dan uly sene gabat gelendigimizi görüp bilersiňiz, ýöne diňe "Fewral" -y yzarlamadyk bolsalar. Duşuşygyň käbir tekstden öň bolmagyny üpjün etmek isleseňiz, şertli aňlatmalarda gözleg usullaryny ulanmak peýdalydyr. Oňyn görünýän şertler bulaşyk bolup biler, sebäbi şertiň özi haýsydyr bir tekste gabat gelmeýär. Şeýlelik bilen, şertiň haýsydyr bir gymmata eýe bolmagyny isleseňiz, aşakdaky ýaly görünmek bilen deňeşdirilmeli:
nagyş: (? (? = takyk) takyk | başga) wo 
setir: takyk başga iki  
gabat gelýän:            ^^^^^^^ ^^^^^^
( Mysal ) Bu polo positiveitel gözleg şertleriniň peýdasyzdygyny aňladýar. Şol tekstiň öňdedigini ýa-da ýokdugyny barlaýarsyňyz, soňra bolsa haçan bolmalydygyna laýyk gelýän nagyş berýärsiňiz. Şertli aňlatma bu ýerde asla kömek etmeýär. Şeýle hem ýokardakylary has ýönekeý yzygiderli aňlatma bilen çalşyp bilersiňiz:
nagyş: (?: takyk | başga) wo 
setir: takyk başga iki  
gabat gelýän:            ^^^^^^^ ^^^^^^
( Mysal ) Diýmek, şertli aňlatmalar üçin barmagyň düzgüni: synagdan geçiriň, gaýtadan synap görüň. Otherwiseogsam, aç-açan hasaplaýan çözgütleriňiz iň tolgundyryjy we garaşylmadyk ýagdaýda başa barmaz :) <h3> Ine, bizi soňky, 20-nji ädimden aýyrýan iň soňky meseleler toparyna gelýäris: </h3> Adaty bir söz ýazyň Indiki sözüň baş harp bilen başlanýandygyny ýa-da ýokdugyny barlamak üçin negatiw görnüşli şertli aňlatmany ulanýar. Şeýle bolsa, diňe bir baş harpy, soňra kiçi harplary alyň. Eger ýok bolsa, söz nyşanlaryny alyň.
nagyş:
setir:   Jones Smit 9sfjn Hobbes 23r4tgr9h CSV Csv vVv gabat 
gelýär    
: ^^^^^ ^^^^^ ^^^^^ ^^^^^^ ^^^^^^^^^^^ 22222 22222 11111 222222 111111111 222 111    
. _ _ owns_ cl_ ouds_ cl_ (Birneme oýlanyp tapylan mysal, ýöne näme edip bilersiňiz ...)
nagyş:
setir: Şol palçylaryň käbir kludlary bar . ouds.
gabat gelýär:              ^^^^ ^^^^   
. _ _ RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim.  4-nji bölüm_ Internetde tapyp boljak yzygiderli aňlatmalar üçin dürli ýerine ýetirişler we ülňüler bar. Has giňişleýin öwrenmek isleseňiz, ajaýyp regularexpressions.info sahypasyny gözden geçirmegiňizi maslahat berýärin , bu ajaýyp salgylanma we men ol ýerden yzygiderli aňlatmalar hakda köp zat öwrendim. Döreden zatlaryňyzy synamak we neşir etmek üçin regex101.com ýaly maslahat berýärin . Bu soňky ädimde, size yzygiderli aňlatmalar, ýagny gaýtalanýan aňlatmalary nädip ýazmalydygy barada azajyk köp maglumat bererin. Pleönekeý gaýtalanmalar gaty gönümel, ýöne geliň yzygiderli aňlatmagyň manysynda nämäni aňladýandygyny pikirlenip göreliň. Adaty aňlatmada ýönekeý gaýtalanma üçin sintaksis(?R)? şeýle ýazylýar : . Emma, ​​elbetde, bu sintaksis aňlatmanyň içinde görünmeli. Biziň etjek zadymyz, özbaşdak aňlatmany öz içindäki höwürtge. Mysal üçin:
nagyş   : ( he ( ? _ _  
_ _ 
_    11111 1111111111 1111111111    
( Mysal ) Höweslendirilen aňlatma islege bagly ( (?R)yzarlanylýar ?), iň ýönekeý oýun, gaýtalanmagy düýbünden äsgermezlik etmekdir. Şeýlelik bilen hey, soň bolsa ohgabat gelýär ( heyoh). (?R)Ondan has çylşyrymly aňlatma gabat gelmek üçin, yzygiderliligi girizen sözlemiň nokadynda gabat gelýän substringiň içerde ýerleşendigini görmelidiris . Başgaça aýdylanda, heheheyohoh ýa-da heyheyheyohohoh we ş.m. tapyp bilerdik. Bu höwürtgelenen sözlemleriň ajaýyp taraplarynyň biri, yzky sözlerden we atlandyrylan toparlardan tapawutlylykda, sizi ozal gabat gelen takyk tekst, häsiýet boýunça çäklendirmeýär. Mysal üçin:
nagyş   : ( [Hh] [ Ee ]  
[ Y] ] ? ^^^^^^^^^^ 
topar:    11111 1111111111 111111111111111    
. _ _ Elbetde, bu käwagt umyt eden zadyňyzy edip bilmejekdigini aňladýar:
nagyş: ((?: \ (\ *) [^ *)] * (? R)? (?: \ * \))) 
setir: (* teswir (* ýerleşdirilen *) däl *)
gabat gelýär:            ^^^^^^^^^^^^ 
topar:               111111111111    
( Mysal ) Bu regexiň daşarky düşündiriş däl-de, diňe içerki teswirini näme üçin alandygyny aýdyp bilersiňizmi? Elbetde bir zat: çylşyrymly yzygiderli aňlatmalar ýazylanda, hemişe pikir edişiňiz ýaly işleýändigine göz ýetiriň. Yzygiderli aňlatmalaryň ýollaryndaky bu ýokary tizlikli ýöriş tamamlandy. Bu syýahatdan lezzet alarsyňyz diýip umyt edýärin. Bolýar, ahyrsoňy, başda söz berşim ýaly, materialy has içgin öwrenmek üçin birnäçe peýdaly baglanyşyklary terk ederin:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION