29Jun

Kā izmantot pamatregulārās izteiksmes, lai meklētu labāk un ietaupītu laiku

Neatkarīgi no tā, vai meklējāt ar Grep vai meklējat programmas, kas var jums daļēji pārdēvēt failus, jūs, iespējams, domājat, vai ir vieglāk paveikt darbu. Par laimi tas ir, un to sauc par "regulārām izteiksmēm".

( Comic no XKCD.com)

Kas ir regulārie izteicieni?

Regulāras izteiksmes ir formulējumi, kas formatēti ļoti konkrētā veidā un kas var izturēt pret daudziem atšķirīgiem rezultātiem. Pazīstams arī kā "regex" vai "regexp", tos galvenokārt izmanto meklēšanas un failu nosaukšanas funkcijās. Vienu regex var izmantot kā formulu, lai izveidotu vairākus dažādus iespējamos rezultātus, no kuriem visi tiek meklēti. Alternatīvi varat norādīt, kā nosaukumu grupu nosaukt, norādot regex, un jūsu programmatūra var pakāpeniski pāriet uz nākamo plānoto izvadi. Tādā veidā jūs varat viegli un efektīvi pārdēvēt vairākus failus vairākās mapēs, un jūs varat pārspēt vienkāršas numerācijas sistēmas ierobežojumus.

Tā kā regulāro izteiksmju izmantošana balstās uz īpašu sintaksi, jūsu programmā jābūt spējīgai to lasīt un analizēt. Daudzām partijas failu pārdēvēšanas programmām operētājsistēmai Windows un OS X ir atbalsts regexps, kā arī starpplatformu meklēšanas rīks GREP( ko mēs pieskārājām mūsu Bash Scripting iesācējiem) un Awk komandrindas rīks * Nix. Turklāt, daudzi alternatīvie failu pārvaldnieki, palaišanas un meklēšanas rīki tos izmanto, un tiem ir ļoti svarīga vieta tādās programmēšanas valodās kā Perl un Ruby. Citas izstrādes vides, piemēram,. NET, Java un Python, kā arī gaidāmais C + + 11, visi nodrošina standarta bibliotēkas regulāro izteiksmju izmantošanai. Kā jūs varat iedomāties, tie var būt ļoti noderīgi, mēģinot samazināt programmā ievadītā koda apjomu.

Piezīme par izvairīšanās rakstzīmēm

Pirms mēs parādīsim piemērus, mēs vēlētos kaut ko norādīt. Mēs izmantosim bash apvalku un komandu grep, lai parādītu jums, kā lietot regulārās izteiksmes. Problēma ir tāda, ka reizēm mēs vēlamies izmantot īpašas rakstzīmes, kas jānodod grep, un bash apvalks interpretē šo rakstzīmi, jo to izmanto arī korķis.Šajos apstākļos mums ir "jābēdz" šīs rakstzīmes. Tas var radīt neskaidrības, jo šis rakstzīmju "izbēgs" arī notiek regexps iekšienē.Piemēram, ja mēs vēlamies ievadīt to grep:

\ & lt;

mums tas būs jāaizstāj ar:

\\\ & lt;

Šeit katram īpašajam rakstzīmei tiek piešķirta viena slīpsvītra zīme. Alternatīvi, jūs varat arī izmantot vienotas cenas:

'\ & lt;'

Vienoti citāti pastāstīt bash NAV, lai interpretētu to, kas no tiem iekšpusē.Lai gan mēs prasām, lai šie pasākumi tiktu veikti, lai mēs varētu jums pierādīt, jūsu programmām( jo īpaši ar GUI balstītajām) bieži vien nav nepieciešami šie papildu pasākumi. Lai lietas būtu vienkāršas un vienkāršas, faktiskā regulārā izteiksme tiks dota kā citēts teksts, un komandrindas ekrānuzņēmumos būs redzams izbēgtais sintaksis.

Kā viņi paplašina?

Regexps ir tiešām īss veids, kā noteikt noteikumus, lai jūsu dators varētu tos paplašināt vairākās iespējās. Apskatīsim šādu piemēru:

tom [0123456789]

Kvadrātiekavas - [un] - paziņojiet analizētājam, ka viss, kas atrodas iekšā, var tikt izmantots jebkurš ONE simbols. Neatkarīgi no tā, kas atrodas šajās iekavās, sauc par rakstzīmju kopu.

Tātad, ja mums būtu milzīgs ierakstu saraksts, un mēs izmantojām šo regex, lai meklētu, tiktu saskaņoti šādi termini:

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

un tā tālāk. Tomēr šāds saraksts NEVĒLĒT atbilstību, un tas netiktu parādīts jūsu rezultātos:

  • tomāts;regex neveido burtus pēc "tom"
  • Tom;regex ir reģistrjutīga!

Jūs varat arī izvēlēties meklēt ar periodu( .), Kas ļaus atrasties jebkuram raksturīgam, ja pastāv raksturs.

Kā jūs varat redzēt, grepping ar

.tom

nav radījusi termiņus, kas bija tikai "tom" sākumā.Tika iekļauti arī "zaļie tomāti", jo pirms "tom" vietas tiek uzskatīts par rakstzīmi, bet tādiem jēdzieniem kā "tomF" sākotnēji nebija rakstzīmes, un tāpēc tie tika ignorēti.

piezīme. Grep noklusējuma darbība ir atgriezt visu teksta rindu, ja daļa no tām atbilst jūsu regex. Citas programmas to var nedarīt, un jūs varat to izslēgt grep ar "-o" karogu.

Jūs varat arī norādīt pārmaiņas, izmantojot cauruli( |), piemēram, šeit:

speciali( s | z) e

Tas atradīs gan

  • specializējas
  • specializējas

Izmantojot grep komandu, mums ir jāizvairās no īpašajām rakstzīmēm( ,|, un) ar atpakaļlejošām joslām, kā arī izmantot "-E" karodziņu, lai to paveiktu darbā un izvairītos no nevajadzīgām kļūdām.

Kā minēts iepriekš, tas ir tāpēc, ka mums ir jāpasaka, ka bash apvalks izlaida šīs rakstzīmes, lai tās greptu un neko nedarītu ar tām. Paraugs "-E" norāda grep, lai iekavas un caurules izmantotu kā īpašas rakstzīmes.

Jūs varat meklēt pēc izslēgšanas, izmantojot karti, kas atrodas gan kvadrātiekavās, gan komplekta sākumā:

tom [^ F | 0-9]

Atkal, ja lietojat grep un bash, atcerieties aizbēgtka caurule!

Noteikumi, kas bija sarakstā, bet neuzrādīja:

  • tom0
  • tom5
  • tom9
  • tomF

Šie neatbilst mūsu regex.

Kā es varu izmantot videi?

Bieži vien mēs meklējam, pamatojoties uz robežām. Dažreiz mēs tikai gribam virknes, kas parādās vārda sākumā, vārda beigās vai koda rindiņas beigās. Tas ir viegli izdarāms, izmantojot to, ko mēs saucam par enkuriem.

Izmantojot rullīti( ārpus iekavām), jūs varat norādīt līnijas "sākumu".

^ tom

Lai meklētu rindiņas beigas, izmantojiet dolāra zīmi.

tom $

Jūs varat redzēt, ka mūsu meklēšanas virkne ir PIRMS enkuru šajā gadījumā.

Varat arī lietot spēles, kas parādās vārdu sākumā vai beigās, nevis veselas līnijas.

\ & tom;

tom \ & gt;

Kā minēts piezīmē šā raksta sākumā, mums ir jāizvairās no šīm īpašajām rakstzīmēm, jo ​​mēs izmantojam bash. Alternatīvi, jūs varat arī izmantot vienotas cenas:

Rezultāti ir vienādi. Pārliecinieties, ka izmantojat atsevišķas cenas, nevis dubultās pēdiņas.

Citi resursi Advanced Regexps

Mēs esam tikai hit aisberga galu šeit. Varat arī meklēt naudas termiņus, kas apzīmēti ar valūtas marķieri, un meklēt jebkuru no trim vai vairākiem atbilstošiem nosacījumiem. Lieta var būt ļoti sarežģīta. Ja vēlaties uzzināt vairāk par regulārajām izteiksmēm, lūdzu, apskatiet šādus avotus.

  • Zytrax.com ir dažas lapas ar konkrētiem piemēriem, kāpēc lietas dara un neatbilst.
  • Regular-Expressions.info arī ir killer ceļvedis daudz vairāk progresīvu stuff, kā arī ērts atsauces lapu.
  • Gnu.org ir lapa, kas veltīta regexps lietošanai ar grep.

Jūs varat arī veidot un pārbaudīt savas regulārās izteiksmes, izmantojot bezmaksas Flash balstītu tiešsaistes rīku, ko sauc RegExr. Tas darbojas, rakstot jūs, ir bezmaksas, un to var izmantot vairumā pārlūkprogrammu.

Vai jums ir iecienīts regulāro izteiksmju izmantojums? Vai zināt lielisku partijas pārdēvētājs, kas tos izmanto? Varbūt jūs vienkārši vēlaties lepoties ar savu grep-fu. Piedāvājiet savas domas, komentējot!