През последния месец или нещо повече, аз обхващах приложенията за бърз достъп и Automator съответно на iOS и macOS. И двете са мощни централи, когато става въпрос за автоматизация в екосистемата на Apple, и като се започне с macOS Monterey тази есен, Shortcuts ще бъде основното приложение за автоматизация на всички устройства на Apple. Ето защо исках да прекарам тази статия в обсъждане на много мощна тема: Използване на регулярни изрази с приложението Shortcuts.
Въпреки че имам опит в компютърните науки и програмирането, някак си никога не бях попадал на регулярни изрази. Може би името ме е изплашило, или може би това е кодът, който е един от най-слабо четимите кодове, които съм виждал.
Какъвто и да е случаят, реших да разгледам по-нататък регулярните изрази, след като разгледах приложението Shortcuts през последните няколко месеца. И това, което открих, беше, че много от ограниченията, с които се сблъсках с Shortcuts, както и Automator, могат да бъдат преодолени с регулярни изрази.
С други думи, не беше, че тези приложения нямаха функции, а че на мен ми липсваше образование.
Така че в днешната публикация вие и аз ще научим заедно тънкостите на регулярните изрази. По този начин можете да извлечете максимума от всяко едно от тези приложения.
Ще покрием основите на регулярния израз (започвайки с това, което е), какво можете да правите с него в приложението Shortcuts, някои уебсайтове и ресурси, които можете да използвате, ако не искате сами да научите регулярни изрази, а след това ще навлезем в основните концепции и механика на регулярния израз език.
Добре, да започваме!
Съдържание
-
Какво представляват регулярните изрази (т.е. регулярни изрази)?
- Неща, които можете да правите с регулярен израз
- Как можете да използвате регулярен израз с приложението Shortcuts?
- Използвайте regex101.com, за да тествате вашите регулярни изрази
- Ако не искате да научите как да използвате регулярен израз с приложението Shortcuts, прочетете това
-
Редовен израз за начинаещи: Започнете да използвате регулярен израз с преки пътища
- Какво представляват ароматите на регулярни изрази?
- Уебсайтове и препратки, които да ви помогнат да започнете да изучавате регулярни изрази с преки пътища
- Как да извършите основно текстово търсене с помощта на регулярен израз с преки пътища
- Добавяне на променливи компоненти към вашите търсения на регулярни изрази
- Обхватите могат да разширят вашето търсене
- Как да изключите думи и знаци от вашите търсения на регулярни изрази с преки пътища
- Заместващите знаци могат да ви дадат повече опции за търсене
- Използвайте квантори, за да посочите дължината на текста, който търсите
- Има още няколко количествени индикатора, за които ще искате да знаете
- Търсене на знаци в началото и в края на низ от текст
- Съхранявайте текстови низове, като използвате функцията за групиране на регулярни изрази с преки пътища
-
Сега какво?
- Как бихте разбили това?
-
Започнете да използвате регулярен израз с преки пътища, за да изведете автоматизацията си на следващото ниво
- Подобни публикации:
Какво представляват регулярните изрази (т.е. регулярни изрази)?
Регулярният израз или „regex“ е част от код, който можете да използвате, за да търсите част от текст в по-голям къс текст.
В случай, че не знаете, част от текст в друг текст се нарича „низ“ в програмирането. Например думата „зелено“ е низ от знаци от текста „Днес носих зелени панталони“.
Така казано по друг начин, регулярният израз е начин за намиране на низ от текст в по-голям текст. И тъй като регулярният израз е написан в код, можете да го използвате за извършване на някои доста сложни операции.
Например, ако искате да търсите думата „имейл“, можете лесно да напишете регулярен код, който търси имейл.
Ако обаче искате да намерите имейл, който е вътре в параграф, и не знаете точно какъв е този имейл, тогава ще трябва да потърсите низ от текст, който е форматиран като имейл. т.е. низ, който следва „[защитен с имейл]” формат.
Сега, да кажем, че искате не само да намерите един имейл от параграф, но всеки електронна поща. Може би искате бързо да ги копирате някъде другаде, да ги актуализирате до нов формат или да ги замените, така че всички да казват „[защитен с имейл]“.
Когато ставате все по-опитни и опитни с регулярните изрази, ще можете да правите всички тези неща и повече.
![](/f/d24774f5d6b9d0aef689b2251f06b34e.jpg)
Неща, които можете да правите с регулярен израз
Добре, така че може би примерите с имейли, които току-що дадох, не са толкова практични. Не се притеснявайте – това е далеч от границата на това, което можете да постигнете с помощта на регулярни изрази с приложението Shortcuts.
Най-общо казано, всичко, което може да направи регулярен израз, попада в една от тези четири категории:
- Намерете низ от текст в по-голям къс текст (т.е. търсене на дума/низ/тип низ на страница с текст).
- Потвърдете, че низ от текст съвпада с желания от вас формат (т.е. проверете дали низ от текст е с главни букви/подреден/пунктуиран правилно).
- Заменете или вмъкнете текст в определена област на част от текст.
- Разделете низ от текст в определени точки (например, разделете част от текст всеки път, когато има запетая).
Нивото на дълбочина, което можете да използвате, за да взаимодействате с всеки от тези видове функции и как можете да ги комбинирате, прави регулярните изрази невероятно мощен инструмент за анализиране и манипулиране на текст.
Как можете да използвате регулярен израз с приложението Shortcuts?
Добре, сега се надяваме, че имате основна представа за какво се използва регулярният израз. Това е вид код, който можете да използвате за търсене на текст, дори ако не знаете точно какъв е този текст.
И така, как ви помага това в преки пътища? Подобно на добавянето на скриптове към вашите преки пътища, това е начин да преминете от основни автоматизации (Пишете ми, когато се отвори входната врата) към по-разширени опции (Автоматично създаване на събитие в календара за моите срещи всеки път, когато получа имейл за среща в Zoom от работа).
Можете да използвате регулярен израз с преки пътища, за да проверите дали въведеното е правилно. Например, ако създадете пряк път, който работи само с URL адреси, можете да използвате регулярен израз в началото на пряк път, за да сте сигурни, че потребителят изпълнява автоматизацията на URL.
Можете да комбинирате регулярен израз със скриптове, за да създадете мощни преки пътища. Например, този пряк път използва регулярни изрази и скриптове, за да превърне баркод в URL за любимия ви магазин.
Когато използвате приложението Shortcuts на Mac (предстояща есен на 2021 г.), можете да използвате регулярни изрази, за да извършвате групови действия върху част от текст. Например, можете да копирате всички имейли в селекция от текст като подреден списък. Или можете да замените всички имена в документ със знаци „*“, за да гарантирате поверителност.
Можете дори да копирате част от текст от едно приложение, да го преформатирате, за да съответства на предпочитанията на друго приложение, и след това да го поставите в това друго приложение, всичко това с едно щракване с десен бутон.
С други думи, regex ви дава пълен контрол върху обработката на текст с приложението Shortcuts. Това може да не звучи много полезно в началото, но сега, когато знаете, че съществува, със сигурност ще започнете да забелязвате колко много преки пътища могат да бъдат подобрени от тази функция. И също така ще забележите, че много преки пътища дори не са възможни без регулярен израз.
Използвайте regex101.com, за да тествате вашите регулярни изрази
След като започнете да използвате регулярен израз с преки пътища, ще попаднете в точка на разочарование:
Наистина е трудно да тествате кода си за регулярни изрази. И това не е уникално за регулярните изрази. Тестването на нещо с приложението Shortcuts е нещо като болка. Единственият начин да направите това е да стартирате пряк път. Този метод не е лош, когато просто тествате вградени функции за преки пътища.
Но за тестване на код, това не позволява проверка ред по ред и не предлага много обратна връзка.
За това бих препоръчал да използвате regex101.com. Това е сайт, в който можете да въвеждате код за регулярни изрази в реално време. Можете също да въведете текст в текстов редактор на същата уеб страница. Докато пишете всеки, ще видите дали вашият регулярен израз работи, защо работи или не, и ще получите информация за намерените съвпадения.
![](/f/f30206806290a07903bf6ae46c9584c4.png)
regex101.com използва различен вкус на регулярни изрази от този, поддържан от преки пътища (повече за това след минута), но е достатъчно близо, за да не се сблъскате с твърде много проблеми.
Използването на този инструмент е страхотно, защото можете първо да напишете своя регулярен израз там, след което да го копирате в приложението Shortcuts, след като работи по предназначение.
Ако не искате да научите как да използвате регулярен израз с приложението Shortcuts, прочетете това
Разбирам – не всеки ще иска да се научи как да използва регулярни изрази с преки пътища. Това е умение и това означава, че ще изисква време и практика. Не е толкова просто, колкото останалите функции за плъзгане и пускане на приложението Shortcuts.
Няма проблем! Въпреки че няма да можете да извлечете толкова много от приложението Shortcuts, колкото някой, който отдели време, за да научи регулярен израз, все още има налични опции за вас. А именно, има сайтове и страници онлайн, където хората са създали списък с ухапвания от регулярни изрази, които можете да копирате и поставите в приложението Shortcuts.
Ето някои връзки, които можете да проверите, ако не искате да научите регулярни изрази:
- https://www.shortcutfoo.com/app/dojos/regex/cheatsheet
- https://www.reddit.com/r/shortcuts/comments/9zo24n/regex_cookbook_for_shortcuts_reusable_regex_to/
- https://www.reddit.com/r/shortcuts/comments/b5labq/match_text_examples_for_the_beginner_a_regex/
- http://www.rexegg.com/regex-cookbook.html
Просто прочетете тези връзки и трябва да можете да намерите общи решения за регулярни изрази за преки пътища, които искате да направите. Това няма да бъде опция без образование, тъй като все пак ще ви отнеме малко, за да разберете това, което гледате. Но това е много по-просто и идеално решение за някой, който няма време да влага в регулярен израз.
Въпреки това трябва да призная, че регулярните изрази не са твърде трудни за научаване, особено ако имате опит с шел кода или програмирането за начинаещи. В началото Regex ми прозвуча като глупост, но след един час четене на статии и игра с regex101.com, успях да започна да пиша регулярни изрази за моите преки пътища.
Това е просто познато нещо – след като го гледате достатъчно дълго, ще спре да изглежда толкова странно. Така че, ако имате време и просто сте уплашени, не бъдете!
Редовен израз за начинаещи: Започнете да използвате регулярен израз с преки пътища
Добре, стига предговор! Трябва да имате представа какво е регулярен израз, какво може да прави, защо трябва да го научите и достатъчно информация, за да решите дали искате да го научите. Сега ще влезем в същността.
По-долу има много съдържание, но не се притеснявайте! Тази статия ще бъде по-скоро учебно ръководство. Препоръчвам да прегледате всеки раздел, за да получите представа за механиката, която използва регулярните изрази. Това също би трябвало да ви помогне да обгърнете главата си, ако все още сте объркани за това какво е регулярен израз.
След като прегледате нещата, препоръчвам да отворите regex101.com и да играете с всеки от инструментите във всеки раздел по-долу. Това ще ви помогне да видите как изглеждат концепциите на практика, както и да подобрите паметта си. След като направите това, можете просто да третирате тази статия като референтна точка – нещо, към което можете да се върнете, когато забравите частите от регулярните изрази.
ОК нека да отидем!
Какво представляват ароматите на регулярни изрази?
Първо, ще разгледаме ароматите на регулярни изрази. Не се притеснявайте – това няма да повлияе на ежедневното ви използване на регулярни изрази с преки пътища. Това е просто нещо, което трябва да знаете, преди да започнете.
Има различни версии на regex, които са известни като „вкусове“. Тези различни версии все още са много сходни. Ако можете да се научите да четете и пишете един вкус, трябва да можете да четете всеки от тях. Просто ще има малки разлики в начина, по който трябва да бъде форматиран кодът ви за регулярни изрази.
В програмирането тези специфики на форматиране са известни като „синтаксис“. Това е просто начинът, по който трябва да напишете своя код, за да бъде разбран от приложението, в което го пишете.
Ето защо синтаксисът има значение
"Хей приятелю, как минава денят ти?"
“, отива ли приятел? вашият здравей ден как"
И двете изречения имат едни и същи думи, знаци и интервали. Само едно има смисъл обаче и това е, защото следва конвенционалния синтаксис.
При кодирането един език за програмиране може да разбира първата версия, но не и втората. За друг език за програмиране обаче вторият може да има пълен смисъл, докато първият изглежда като глупост. За някой, който може да говори английски обаче, вероятно ще разберете намерението и на двата реда, въпреки че единият ще отнеме малко работа, за да разбере значението на.
Това е (някак си) какви са различните вкусове на регулярните изрази. Всички те ще изглеждат малко по-различни и малко подобни на вас. Но трябва да използвате правилния вкус за приложението, което използвате, в противен случай това приложение няма да има представа какво сте написали.
Приложението Shortcuts разбира аромата на ICU на регулярния израз, така че това е вкусът, който искате да използвате. Сайтът regex101.com има няколко различни вкуса, от които можете да избирате вляво на страницата. Той обаче използва PCRE, което е доста подобно на ICU.
Важно е да знаете, че има различни вкусове на регулярни изрази, защото без съмнение ще се сблъскате с различни вкусове онлайн. Ако намерите малко регулярен израз, който искате да откраднете, но не можете да го накарате да работи с преки пътища или просто не изглежда правилно, проверете в какъв вкус е написано!
Уебсайтове и препратки, които да ви помогнат да започнете да изучавате регулярни изрази с преки пътища
Друго нещо, което искам да покрия, преди да започнем да изследваме действителната механика на писане на регулярни изрази, са ресурсите. В никакъв случай не твърдя, че тази публикация е изчерпателен ресурс за изучаване на регулярни изрази. Той просто е предназначен да бъде полезна отправна точка за тези, които искат да използват регулярни изрази с преки пътища.
Ако искате да се потопите по-дълбоко в регулярните изрази или смятате, че тази статия не ви дава помощта, от която се нуждаете, можете да разгледате някои от тези статии, ръководства и инструменти:
- https://regex101.com – Уебсайт, който ви позволява да тествате своя регулярен израз в реално време.
- https://www.shortcutfoo.com/app/dojos/regex/cheatsheet – Мамамалка, когато забравите какво прави всеки герой
- http://www.rexegg.com – Този уебсайт е изчерпателен ресурс за изучаване на всичко, което трябва да знаете за регулярните изрази. Вижте това, ако искате да станете опитни с регулярни изрази.
- https://scottwillsey.com/blog/ios/regex1/ – Това е поредица от блогове от четири части за използване на регулярни изрази с преки пътища. Използвам много различен подход от това ръководство, така че би трябвало да е хубава придружаваща поредица към тази статия.
- Stack Overflow и Reddit са добри уебсайтове за споделяне на вашите въпроси за регулярни изрази и напредък, за да получите съвети и отговори.
Тези ресурси са различни от изброените в Ако не искате да научите как да използвате регулярен израз с приложението Shortcuts раздел, тъй като всички те ще изискват действително да започнете да изучавате регулярни изрази. Те са по-изчерпателни, докато другите са само референтни точки.
Как да извършите основно текстово търсене с помощта на регулярен израз с преки пътища
Добре! Вече стигнахме до точката, която всички чакаха: Ще научим основите на използването на регулярни изрази с преки пътища.
Нека започнем с основно търсене, тъй като това е най-простото нещо, което можете да направите с регулярен израз. Както споменахме по-горе, препоръчвам да отворите regex101.com в друг раздел, за да можете да следвате.
В най-основния си вид, регулярният израз ще търси (или съвпада) каквото и да напишете в него. Например, ако трябваше да напиша Добре
като моя код за регулярни изрази, той ще намери всеки екземпляр на думата „Добре“ в това ръководство.
Регистрът, интервалът и пунктуацията имат значение. Това означава, че Добре
, добре
, Добре!
, и Добре ,
всички ще дадат различни резултати.
И това е! Всеки път, когато въведете нещо в търсене на регулярни изрази, без да използвате специални знаци, регулярният израз ще съвпада с всичко, което точно съвпада с това, което сте въвели.
Има една уловка! Някои знаци на вашата клавиатура също са специални знаци за регулярни изрази. Това означава, че те изпълняват някаква функция в регулярния израз.
В ?
символът е един такъв знак. Използва се в кода за регулярни изрази като квантор. Така че, ако се опитате да потърсите „Добре?“ чрез въвеждане Добре?
като ваш код за регулярни изрази, няма да получите това, което искате.
![](/f/70380bc1ab9d1f6457353bcf1efc9dbb.png)
За да поправите това, трябва да посочите, че искате да използвате „?” като низ, а не като специален символ. За да направите това за този или всеки друг герой, просто добавете a \
символ точно преди знака, чиито специални свойства искате да анулирате.
Така че, ако искате да потърсите „Добре?“ с regex вашият код ще изглежда така:
Добре\?
![](/f/330260043d92fb0d7f3c26b25940f87e.png)
Ако не сте сигурни дали конкретен знак се третира като специален знак от регулярен израз, можете да проверите тази измама за всички специални знаци в регулярния израз.
Търсете повече от една дума, като използвате знака „или“.
Друг важен компонент от търсенето на низове с регулярен израз е използването на функцията „или“. Това е знак, който можете да поставите между две думи/знака, за да кажете „Съпоставете това или това“.
Например, ако искам да търся в цял текст за думите „добре“ и „Добре“, бих използвал |
характер. Така:
Добре|добре
Ако ви е трудно да намерите |
характер, задръжте смяна натиснете надолу и натиснете \
ключ. То е над връщане клавиш на повечето клавиатури.
Добавяне на променливи компоненти към вашите търсения на регулярни изрази
Добре, сега, когато знаете какво представлява неутрален регулярен израз, е време да вземете първия си специален знак. Това биха били квадратните скоби, които са тези неща []
.
Каквото и да поставите в тези скоби, ще се счита за променлив компонент на вашето търсене на регулярни изрази. Можете да поставите толкова знака в скобите, колкото искате, въпреки че само един ще бъде валиден за съвпадение.
Добре, това звучи малко сложно, но не е! Ето как изглежда на практика:
-
[Добре
просто ще съвпадне с думата „Добре“. Някак безсмислено. -
[AB] Добре
ще съвпада и с „Alright“ и „Blright“. -
Добре
ще съответства на „Alright“, „Alroght“, „Alrught“, „Alrxght“ и т.н.
![](/f/a0dc8c0e3d37921a09e81008e9407b11.png)
Можете да комбинирате знаци в скоби, както и да използвате множество скоби в един и същи ред на регулярен израз. [AB]r[i1]gh[tuvwxyz]
е валидна част от регулярен израз. Надяваме се обаче, че не изглежда толкова хаотично, колкото можеше да изглежда преди няколко минути!
Обхватите могат да разширят вашето търсене
Следващият бит от регулярен израз, който ще бъде полезен с преки пътища, е диапазонът. Диапазоните ви позволяват да посочите диапазон от знаци, които ще приемете.
В предишния раздел може би сте забелязали, че моите скоби включват много последователни букви. Най-дългото беше [tuvwxyz]
. Тези букви се появяват в азбуката в същия ред, точно една до друга.
Това означава, че мога да използвам диапазон, вместо да ги изписвам. Това би изглеждало така:
добре [t-z]
Това парче код за регулярни изрази ще направи същото като добре [tuvwxyz]
. Просто е по-чисто и по-лесно за писане.
Можете да замените същия диапазон с [a-z]
ако искате да приема всяка малка буква от азбуката. Или бихте могли да използвате [0-9]
ако искате да приемете произволно едноцифрено число.
Можете също да комбинирате диапазони в една и съща скоба. Например това Добре [i-ux-z]gh
ще приеме „Alright“, „Alroght“, „Alrxght“ и „Alryght“, но няма да приеме „Alraght“ или „Alrvght“.
![](/f/0539fe4f5351aeda0a97eb845ed26608.png)
Между другото има и други варианти на думата „Добре“, които този код ще приеме, и много други, които няма да приеме. Това е само кратък избор, за да запазите нещата, добре, кратки.
Ако ви е трудно да разберете какво [i-ux-z]
означава, че може да помогне да го видите написано така:
[i-u, x-z]
Това не е правилен синтаксис на регулярни изрази - не трябва да използвате запетая за разделяне на диапазони. Но да се надяваме, че това ще помогне да стане по-смислено!
Нямате нужда от запетаи в регулярния израз, за да разделите диапазони и не е нужно да поставяте диапазони точно един до друг. Можете да го промените на [i-uabcx-z]
. Това ще приеме същите диапазони като преди плюс знаците „a“, „b“ и „c“.
Как да изключите думи и знаци от вашите търсения на регулярни изрази с преки пътища
Добре, сега стигаме до някъде! Ако сте следвали тази статия до този момент, трябва да можете да разгледате кода по-долу и да разберете за какво отговаря:
Ap[p-r]le[Tt]ool[BbLF]ox
Ако можете да го прочетете, значи знаете, че част от регулярния израз включва много на възможните вариации на думата „AppleToolBox“. И така, ако искаме да намалим броя на вариациите, които той приема, без да променяме нашия диапазон?
Тук идва символът „не“. Изглежда така: ^
. Ако ви е трудно да го намерите на клавиатурата си (както на мен), задръжте смяна и натиснете 6 клавиш на клавиатурата си.
За да използвате ^
знак, поставете го в началото на знака, който искате да изключите.
Има уловка! В ^
символът не работи извън функцията за регулярни изрази. Не можете просто да го поставите пред буквата „А“, за да изключи тази буква от вашето търсене. Кодът на регулярния израз ^А
просто ще търси главно "А".
Вместо това го комбинирайте със скоби и други специални знаци за регулярни изрази.
Например, ако исках да потърся някакъв екземпляр на думата „Добре“, която не започва с буквата „А“, бих използвал кода [^A] Добре
.
![](/f/8f4e891920940025836893942144d7f6.png)
Можете дори да го комбинирате с диапазони! Просто го поставете в началото на вашата скоба и всичко в тази скоба, включително диапазоните, ще бъде изключено от вашето търсене. Така:
![](/f/014ec0a38e4dd32130aae5c9f4adfcaf.png)
Ами ако искате да изключите конкретна дума от търсенето си?
Трудно намерих тази информация. Потребител на Stack Overflow обаче имаше решението и то изглежда така:
^(?!(дума)$).+$
Просто сменете дума
с всяка дума, която искате да изключите от търсенето си. Така:
![](/f/df96f2f11145f1939f386069b5855cdd.png)
Можете да прочетете тази публикация за препълване на стека тук ако искате да научите повече за този конкретен случай на употреба.
Заместващите знаци могат да ви дадат повече опции за търсене
Това ни води до заместващи знаци. Заместващият знак, който е точка .
, се използва за представяне на всеки единичен знак, без нито един. Ако просто напишете .
като ваш код за регулярни изрази с преки пътища, той ще върне всеки един знак в тялото на текст като отделно съвпадение.
![](/f/2a307376eb5a56bd70d7a951ceb220f9.png)
Не бих препоръчал да го използвате за тази цел, разбира се! Вместо това препоръчвам да го използвате вместо един знак в дума. Например, добре
ще съответства на „Alright“, „Alrxght“, „Alr
И това е почти всичко! Заместващият знак е доста лесен за разбиране. Съвпада с всичко! Това го прави полезно за намиране на низове, които съответстват на конкретен формат, като същевременно имат уникални знаци.
Имейлите, например, всички ще изглеждат доста сходни, без да са еднакви. Заместващият знак може да ви помогне да комбинирате елементи, за които знаете, че ще бъдат там (като „.com“ и „@“) със знаци, които не познавате (като „my_email567“, iCloud или „Gmail“).
Друг интересен случай на употреба е използването на .
символ, за да намерите низове с определена дължина.
Например, ако искам да намеря всеки низ от четири знака в текст, бих могъл да го използвам ...
с място от двете страни.
![](/f/9ff1fc4bd52cef0f1a725d174d8c6e83.png)
И ето всички низове от седем знака в същия текст:
![](/f/9bec237750b14a040be3eedbe7681ead.png)
Имайте предвид, че това не е идеалният метод за намиране на низове с определена дължина. Както можете да видите в горните примери, някои низове са съпоставени, които не трябва да бъдат, а някои, които трябва да бъдат игнорирани. Просто е интересно да запомните, че можете да използвате .
символ за броене на знаци.
Също така, имайте предвид, че .
е специален символ в регулярния израз. Това означава, че ще трябва да добавите a \
пред него, ако искате да търсите точки. Това означава, че ще трябва да използвате Добре\.
да съответства на „Добре“.
Използвайте квантори, за да посочите дължината на текста, който търсите
Добре, така че можете да използвате технически .
символ, за да намерите низ, който заема определен брой знаци. През повечето време обаче ще искате да сте по-конкретни.
Тук идват количествените показатели. Кванторите ви позволяват да посочите дължината на низа, който търсите, когато използвате регулярен израз с преки пътища.
Например, кажете, че искате да намерите всяка дума, която е дълга точно три букви. За да посочите това, ще искате да използвате тези скоби:
{}
Когато поставите тези скоби след тях []
скоби, вие посочвате, че искате низ, който съответства на броя на знаците вътре в това {}
и диапазона от знаци, посочени в това []
.
Сигурен съм, че сега няма много смисъл, така че нека да разгледаме един пример!
Кажете, че искате да намерите всички споменати години в текст. Тъй като годината се състои от четири числа (очевидно не всяка година от всички времена, просто ме последвайте тук), можете да използвате този код, за да съпоставите годините в този текст:
[0-9]{4}
Този код казва, че искаме низ, съставен от знаци от 0 до 9, който е по-специално дълъг четири знака. Можете да видите как намира този конкретен низ на следната екранна снимка:
![](/f/82a2e12dfe162ae51afb7a3bbc2ae606.png)
Трябва да отбележа, че има някои проблеми с този код за регулярни изрази и това е, че той не отчита интервали или пунктуация. Така че, ако кодът намери число, по-дълго от четири знака, като „12345678“, той ще намери низа „1234“ и низа „5678“.
За да разрешите този проблем, бихте искали да добавите интервал в началото на кода и скоба след {4}
който съдържа друг интервал, точка, въпросителен знак, запетая и удивителен знак. По този начин той ще пренебрегне дълги низове от числа, без да пропуска низове от числа, които имат препинателни знаци в края си вместо интервал.
Може също да искате да използвате квантори, за да посочите повече от една дължина на низа. Например, може би искам да намеря низ с дължина четири знака, но също и седем и единадесет. Ето как би изглеждало това:
[a-z]{4,7,11}
Има още няколко количествени индикатора, за които ще искате да знаете
Добре, значи все още има още количествени показатели! Тези последните няколко квантора са за случаите, когато искате да посочите дължината на низ, без да сте твърде конкретни.
Например, да речем, че искате да намерите низ с произволна дължина, която може да съответства на регулярния израз. Като име! Имената (в западните страни) започват с една главна буква и завършват с произволно количество малки букви, последвани от интервал. За да намерите име, трябва да напишете следния код:
[A-Z][a-z]*
[A-Z]
указва, че първият символ на низа трябва да бъде главна буква. [a-z]*
указва, че останалата част от низа трябва да се състои от малки букви, но няма значение колко букви следват. И интервалът в края означава, че той ще прекрати мача, след като намери място в края на малките букви.
Златно комбо в регулярен израз е .*
. Това означава да съпоставяте всеки знак безкрайно. С други думи, той ще съответства на целия текст като един елемент.
Следващият квантор, който трябва да знаете, е +
. Този е точно като *
с изключение на това, че няма да съответства на низ с нула знака. *
ще съответства на всяка дължина на низа, която включва низове, които нямат дължина. +
, от друга страна, се нуждае от низ с поне един знак или повече.
И накрая, има ?
квантор. Това е странно. Той указва, че даден низ има дължина или нула символа, или един знак. Това е – или нищо, или само едно. Така че, ако използвате кода [a-z]?
с интервал в началото и края, той ще търси единични букви в текста.
Търсене на знаци в началото и в края на низ от текст
Приближаваме края на нашето ръководство за използване на регулярни изрази с преки пътища! Има само още два вида регулярни изрази, които ще използвате с преки пътища.
Първите са знаци, които ви позволяват да съпоставяте низове въз основа на начина, по който те започват и/или завършват.
Когато не е в скоби, ^
ролята на героя се променя от значението „изключвам“ на „започва с“. Той указва, че низ трябва да започва с каквото искате. Например, ако пишете ^А
, което би съвпадало с буквата „A“ в низовете „Alright“, „Apple“ и „A“.
Не съвпада с цялата дума обаче. За това ще трябва да го промените на ^A[A-Za-z]*
. Това ще съвпада с първата дума от параграф/низ, стига тази дума да започва с главно „А“.
Като странична забележка можете да напишете [A-Za-z]
като [A-z]
. Това означава същото нещо, просто намирам, че първото е малко по-ясно, когато учите.
За да посочите края на низа, ще искате да използвате $
характер. Работи по същия начин като ^
характер. Единствената разлика е, че го пишете в края на скоба/низ, а не в началото.
Например, ако искате да намерите низове/параграфи, които завършват с “le”, ще използвате кода [A-z]*le$
. Това ще съответства на „Таблица“, „ябълка“ и „способен“, стига да са в края на низ или параграф.
Regex дори ще отрече това съвпадение, ако има интервал или препинателен знак в края на низа. "Маса." няма да се съпоставят с този код.
За да коригирате това, можете да вземете предвид пунктуацията. Този код отчита различни форми на пунктуация и интервали, които могат да се появят в края на низ, включително препинателен знак, последван от интервал:
[A-z]*(le[\.\?!, ]?[ ]?)$
Този код ще съответства на „Able“, „table.“, „stable“ и „capable? “.
Съхранявайте текстови низове, като използвате функцията за групиране на регулярни изрази с преки пътища
Добре! Стигнахте до края на нашето ръководство за AppleToolBox за използване на регулярни изрази с преки пътища. Остава да научите само още една функция за регулярни изрази и това е групирането.
Групирането е може би най-важната характеристика на регулярния израз, тъй като е това, което ви позволява да правите неща с кода на регулярния израз, който пишете. Без него регулярният израз е просто функция за търсене. Той може да ви каже само дали низ съществува в по-голям обем от текст, т.е. ще върне „true“ или „false“.
С групирането обаче можете да съхранявате резултатите от вашия код за регулярни изрази. И това означава, че можете да копирате съвпадения, да ги съхранявате в променливи, да ги замените с друг текст, да променяте форматирането им и всичко останало, което бихте искали да правите с регулярния израз.
За щастие групирането е супер лесно! Просто поставете каквото искате да групирате в скоби ()
. Каквото и да поставите в скоби, ще се третира като група.
Ако поставите цял ред от регулярни изрази в скоби, като (.*@.*\..{3})
, тогава тази група ще бъде запомнена от вашия код, което ще позволи да бъде извикана по-късно.
Важно е да използвате групи само когато е необходимо. Тъй като се съхраняват в паметта, те могат да доведат до намаляване на производителността на вашия код. Запазете групи, когато са необходими!
Можете да използвате и групи за организация
Можете също така да използвате групи, за да организирате своя код за регулярни изрази с преки пътища. Когато направите това, групата в скобите не е задължително да бъде запомнена.
Например, кажете, че искам да съчетая думата „Здравей“, освен че не ме интересува коя е последната буква. Тя може да бъде всяка малка или главна буква или дори цифра. “Hell3838djdjajaksks” и “Hello” трябва да се отчетат като съвпадения. „Адът“, от друга страна, не трябва да се брои.
За да работи това, пиша кода Ад [A-z]|[0-9]+
. Но това е резултатът, който получавам:
![](/f/4119408864de741e8b53817564b59e1a.png)
Причината да не съвпада с начина, по който очаквах, е, че +
се прилага само към [0-9]
скоба. Трябва ми, за да се прилага и за двете скоби.
Освен това този код казва, че искам и едно от двете по дяволите [A-z]
или[0-9]
. Така че съвпада за думи, които започват с „Ад“ и завършват с буква, или търси всякакви низове от числа. Това, което всъщност ми трябва, е да съвпада с екземпляри на думата „Ад“, които завършват с буква или цифра.
За да поправя това, мога да използвам група и да пренапиша кода като Ад ([A-z]|[0-9])+
. Сега той търси думата „Ад“, последвана от всяка буква или цифра. И тъй като на +
се прилага и към двете скоби, може да бъде всяка комбинация от букви и цифри, стига да има поне една буква или цифра.
Както можете да видите на екранната снимка по-долу, тази група решава проблема ми, без непременно да съхранява информацията в тази група:
![](/f/2bf0957d091c707996ebe378502d9a45.png)
Сега какво?
И това е! Това е почти всичко, което някога бихте искали да знаете за използването на регулярни изрази с преки пътища. Надяваме се, че се чувствате достатъчно уверени, за да започнете да експериментирате с регулярни изрази сега, дори ако в началото нямаше смисъл за вас.
Сега, когато знаете основите на регулярните изрази, вие сте готови да започнете да го използвате във вашите преки пътища! Shortcuts приема въвеждане на регулярни изрази в следните действия:
- Текст на съвпадение
- Заменете текста
Използвайки тези две действия за преки пътища, можете да вмъкнете регулярен израз във вашите преки пътища.
Свържете това с възможностите за автоматизация на Shortcuts и имате на ваше разположение доста мощен инструмент.
Можете да използвате регулярни изрази, за да улесните форматирането на текст в преките пътища, да извличате информация от имейли, текстове, уебсайтове, файлове и събития в календара, създават текст, който следва определен формат, проверява дали въвеждането е въведено правилно и Повече ▼.
Например, кажете, че искате да съвпадате за имейли. Може би трябва да проверите дали низ от текст е имейл, или може би искате да изтеглите имейл(и) от текст.
Как бихте разбили това?
Е, знаете, че основната структура на имейл ще бъде някаква комбинация от букви, цифри и знаци, последвани от символа „@“, след това последвано от името на уебсайт като Gmail или iCloud, което след това е последвано от „.com“, „.org“ или някакъв друг вид тризнака от най-високо ниво домейн.
За да напишете това в регулярен израз, трябва да посочите, че искате низ от поне един знак, който да се следва веднага със символа „@“, след това друг низ от поне един знак, последван от „.“, след това последван от низ от три символи. Това би изглеждало така:
[защитен с имейл]+\..{3}
Ако поставите това в Текст на съвпадение или Заменете текста действия в Shortcuts, ще имате автоматизация, която може да намира, съхранява и манипулира имейл адрес.
Можете да използвате този вид решаване на проблеми, за да измислите свои собствени решения за регулярни изрази или да намерите някои, които други са направили онлайн!
Започнете да използвате регулярен израз с преки пътища, за да изведете автоматизацията си на следващото ниво
И това, приятели, наистина е така. Надявам се, че ви е харесало да следвате заедно с тази статия! Това е едно от най-амбициозните парчета, които някога съм писал за AppleToolBox. Трябваше да се науча на регулярен израз, за да го напиша и се надявам, че по този начин успях да ви помогна да го научите.
Използването на регулярни изрази с преки пътища не е по-различно от това да научите как да правите нещо друго на вашия смартфон или компютър. Просто отделете малко време и търпение и в крайна сметка ще стигнете до там.
За повече ръководства, уроци и новини за всички неща на Apple, вижте останалата част блога на AppleToolBox.
Добре [A-Z][a-z]+
, ще се видим следващия път!