If-Koubou

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

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

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

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

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

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

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

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

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

\<

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

\\\<

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

'\<'

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

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

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

Том [0123456789]

Квадратните скоби - [и] - казват на анализатора, че каквото и да е вътре, всеки един знак може да бъде използван за съвпадение. Каквото и да е вътре в тези скоби се нарича набор от знаци.

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

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

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

  • домат; в regex не се отчитат никакви букви след "том"
  • Том; в regex се прави разлика между главни и малки букви!

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

Както можете да видите, с гроздобер

.tom

не възпроизвеждаше термини, които само "том" в началото. Дори и "зелени домати" дойдоха, защото пространството преди "том" се брои като характер, но термини като "tomF" нямаха характер в началото и по този начин бяха игнорирани.

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

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

Speciali (S | Z) е

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

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

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

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

Можете да търсите с изключване с помощта на карет, който е вътре във вашите квадратни скоби и в началото на набор:

Том [^ F | 0-9]

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

Условията, които са били в списъка, но не се показват, са:

  • tom0
  • tom5
  • tom9
  • tomF

Те не съвпадат с нашия регекс.

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

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

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

^ Том

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

Том $

Можете да видите, че низът ни за търсене идва ПРЕДИ котвата в този случай.

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

\<>

Том \>

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

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

Други ресурси за разширени регекс

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

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

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

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