Начална » как да » Как да използваме основните редовни изрази, за да търсим по-добре и спестяваме време

    Как да използваме основните редовни изрази, за да търсим по-добре и спестяваме време

    Независимо дали търсите с Grep или разглеждате програми, които могат да преименуват файловете за вас, вероятно сте се чудили дали има по-лесен начин да свършите работата си. За щастие, има и се нарича "редовни изрази".

    (Комикс от XKCD.com)

    Какво представляват регулярните изрази?

    Редовните изрази са изречения, форматирани по много специфичен начин и които могат да заемат много различни резултати. Също известни като "regex" или "regexp", те се използват предимно в функциите за именуване на търсенето и файловете. Един regex може да се използва като формула, за да се създадат няколко различни възможни изхода, всички от които се търсят. Алтернативно, можете да укажете как група файлове трябва да се наименуват чрез задаване на реджекс и вашият софтуер може постепенно да премине към следващия планиран изход. По този начин можете много лесно и ефективно да преименувате няколко файла в няколко папки и да преминете отвъд ограниченията на обикновената система за номериране.

    Тъй като използването на регулярни изрази се основава на специален синтаксис, вашата програма трябва да може да ги чете и анализира. Много програми за преименуване на пакетни файлове за Windows и OS X имат поддръжка за regexps, както и за платформата за търсене на различни платформи GREP (която засегнахме в нашето Bash Scripting за начинаещи) и инструмента за командния ред Awk за * Nix. В допълнение, много алтернативни файлови мениджъри, ракети-носители и инструменти за търсене ги използват, и те имат много важно място в програмните езици като Perl и Ruby. Другите среди за разработка като .NET, Java и Python, както и предстоящите C ++ 11, осигуряват стандартни библиотеки за използване на регулярни изрази. Както можете да си представите, те могат да бъдат наистина полезни, когато се опитвате да минимизирате количеството код, който поставяте в програмата.

    Забележка за излизане от символи

    Преди да ви покажем с примери, бихме искали да изтъкнем нещо. Ще използваме bash shell и командата grep, за да ви покажем как да приложите регулярни изрази. Проблемът е, че понякога искаме да използваме специални символи, които трябва да бъдат предадени на grep, а черупката на bash ще интерпретира този символ, защото черупката също го използва. При тези обстоятелства трябва да „избягаме“ от тези знаци. Това може да стане объркващо, защото това "избягване" на знаци също се случва вътре в regexps. Например, ако искаме да въведем това в grep:

    \<

    ще трябва да заменим това с:

    \\\<

    Всеки специален символ тук получава една обратна наклонена черта. Като алтернатива можете да използвате и единични кавички:

    '\<'

    Единичните кавички казват bash NOT да тълкува какво е вътре в тях. Въпреки че изискваме тези стъпки да бъдат предприети, за да можем да демонстрираме за вас, вашите програми (особено тези, базирани на GUI) често не изискват тези допълнителни стъпки. За да бъдат нещата прости и ясни, действителният редовен израз ще ви бъде даден като цитиран текст и ще видите скрития синтаксис в екранните снимки на командния ред..

    Как се разширяват?

    Regexps са наистина сбит начин за посочване на термини, така че вашият компютър да може да ги разширява в множество опции. Нека разгледаме следния пример:

    Том [0123456789]

    Квадратните скоби - [и] - казват на машината за разбор, че каквото и да е вътре, може да бъде използван някой ЕДИН знак за съвпадение. Каквото и да е вътре в тези скоби се нарича набор от символи.

    Така че, ако имахме огромен списък от записи и използвахме този regex за търсене, следните термини ще бъдат съчетани:

    • мъжко животно
    • tom0
    • tom1
    • tom2
    • tom3

    и така нататък. Следващият списък обаче НЕ ще бъде съвпадащ и следователно няма да се показва в резултатите ви:

    • домати; regex не отчита никакви букви след „tom“
    • Том; regex е чувствителен към малки и големи букви!

    Можете също така да изберете да търсите с период (.), Който ще позволи всеки символ да присъства, ако има наличен знак.

    Както можете да видите, подправка

    .мъжко животно

    не повдигнаха термини, които в началото имаха само „tom“. Дори и „зелените домати“ влязоха, защото пространството преди „tom“ се счита за характер, но термините като „tomF“ нямаха характер в началото и по този начин бяха игнорирани.

    Забележка: Поведението по подразбиране на Grep е да върне цял ред текст, когато някоя част съвпада с вашето regex. Други програми може да не го направят и можете да изключите това в grep с флага '-o'.

    Можете също да посочите алтернатива, като използвате тръба (|), като тук:

    Speciali (S | Z) е

    Тук ще намерите и двете:

    • специализират
    • специализират

    Когато използвате командата grep, ние трябва да избягаме от специалните символи (, |, и) с обратни наклонени черти, както и да използваме флага '-E', за да накараме това да работи и да избегнем грозни грешки..

    Както споменахме по-горе, това е така, защото трябва да кажем на bash shell да предаде тези знаци на grep и да не прави нищо с тях. Флагът "-E" указва на grep да използва скобите и тръбата като специални символи.

    Можете да търсите по изключение, като използвате карето, което е както в квадратните скоби, така и в началото на групата:

    Том [^ F | 0-9]

    Отново, ако използвате grep и bash, не забравяйте да избягате от тази тръба!

    Термините, които са в списъка, но не се показват, са:

    • tom0
    • tom5
    • tom9
    • tomF

    Те не съответстваха на нашата регресия.

    Как мога да използвам среди?

    Често търсим въз основа на граници. Понякога искаме само низове, които се появяват в началото на дадена дума, в края на дадена дума или в края на ред от код. Това може лесно да се направи, използвайки това, което наричаме котви.

    Използването на каре (извън скоби) ви позволява да определите „началото“ на дадена линия.

    ^ Том

    За да търсите края на ред, използвайте знака за долар.

    Том $

    Можете да видите, че нашият низ за търсене идва преди котвата в този случай.

    Можете също така за съвпадения, които се появяват в началото или в края на думите, а не за цели линии.

    \

    Том \>

    Както споменахме в бележката в началото на тази статия, трябва да избягаме от тези специални знаци, защото използваме bash. Като алтернатива можете да използвате и единични кавички:

    Резултатите са същите. Уверете се, че използвате единични кавички, а не двойни кавички.

    Други ресурси за напреднали Regexps

    Тук само ударихме върха на айсберга. Можете също така да търсите парични термини, обозначени с валутния маркер, и да търсите за всеки от три или повече съвпадащи термини. Нещата могат да станат наистина сложни. Ако искате да научите повече за регулярните изрази, моля, разгледайте следните източници.

    • Zytrax.com има няколко страници със специфични примери за това, защо нещата не вървят и не съвпадат.
    • Regular-Expressions.info също има убийствено ръководство за много по-напреднали неща, както и удобна страница за справки..
    • Gnu.org има страница, посветена на използването на regexps с grep.

    Можете също така да създавате и тествате вашите регулярни изрази с помощта на безплатен Flash-базиран онлайн инструмент, наречен RegExr. Тя работи, докато пишете, е безплатна и може да се използва в повечето браузъри.


    Имате ли предпочитано използване за регулярни изрази? Знаете ли за голямото преименуване на партиди, което ги използва? Може би просто искаш да се хвалиш с греп-фу. Дайте своя принос на коментарите си!