Як використовувати основні регулярні вирази для пошуку кращого і економії часу
Незалежно від того, чи шукали ви з Grep або переглядали програми, які можуть пакетно перейменовувати файли для вас, ви, напевно, задавалися питанням, чи є простіший спосіб зробити вашу роботу. На щастя, є, і це називається "регулярні вирази".
(Комікси з XKCD.com)
Що таке регулярні вирази?
Регулярні вирази є твердженням, форматованими дуже специфічним чином, і які можуть бути різними результатами. Також відомі як "регулярні вирази" або "регулярні вирази", вони в основному використовуються в функціях іменування файлів і файлів. Один регулярний вираз може використовуватися як формула для створення декількох різних можливих виходів, які шукаються. Крім того, можна вказати, як групу файлів слід називати, вказавши регулярний вираз, і ваше програмне забезпечення може поступово переходити до наступного запланованого виводу. Таким чином, можна перейменовувати декілька файлів у декількох папках дуже легко та ефективно, і ви можете вийти за межі простої системи нумерації.
Оскільки використання регулярних виразів покладається на спеціальний синтаксис, ваша програма повинна бути здатною читати і аналізувати їх. Багато програм перейменування пакетних файлів для Windows і OS X мають підтримку регулярних виразів, а також крос-платформний інструмент пошуку GREP (який ми торкнулися в нашому Bash Scripting для керівництва початківців) і інструмент командного рядка Awk для * Nix. Крім того, їх використовують багато альтернативних файлових менеджерів, пускових пристроїв і інструментів пошуку, і вони мають дуже важливе місце в мовах програмування, таких як Perl і Ruby. Інші середовища розробки, такі як .NET, Java і Python, а також майбутні C ++ 11, забезпечують стандартні бібліотеки для використання регулярних виразів. Як ви можете собі уявити, вони можуть бути дуже корисними, коли намагаються мінімізувати кількість коду, який ви вклали в програму.
Примітка про виділення символів
Перш ніж ми покажемо вам приклади, ми хотіли б що-небудь вказати. Ми будемо використовувати оболонку bash і команду grep, щоб показати вам, як застосовувати регулярні вирази. Проблема полягає в тому, що іноді ми хочемо використовувати спеціальні символи, які потрібно передавати до grep, і оболонка bash буде інтерпретувати цей символ, оскільки оболонка також використовує його. За цих обставин нам потрібно "втекти" цих персонажів. Це може призвести до заплутаності, оскільки це "втеча" символів також відбувається всередині регулярних виразів. Наприклад, якщо ми хочемо ввести це у grep:
\ T<
нам доведеться замінити це на:
.<
Кожен спеціальний символ тут отримує одну зворотну слеш. Також можна використовувати одинарні лапки:
'\ T<'
Одинарні лапки говорять bash НЕ про інтерпретацію того, що всередині них. Хоча ми вимагаємо, щоб ці кроки виконувалися, щоб ми могли продемонструвати вам, ваші програми (особливо графічні інтерфейси) часто не вимагають цих додаткових кроків. Для того, щоб зробити речі простими та зрозумілими, фактичний регулярний вираз буде надано вам у вигляді цитованого тексту, і ви побачите у скриншотах командного рядка вимкнений синтаксис..
Як вони розширюються?
Regexps - це дуже лаконічний спосіб визначення термінів, щоб ваш комп'ютер міг розширювати їх у декілька варіантів. Давайте розглянемо наступний приклад:
tom [0123456789]
Квадратні дужки - [і] - говорять двигуну аналізу, що все, що знаходиться всередині, будь-який ОДИН символ може бути використаний для відповідності. Все, що знаходиться в цих дужках, називається набором символів.
Отже, якщо у нас був величезний список записів, і ми використовували цей регулярний вираз для пошуку, такі терміни будуть збігатися:
- tom
- tom0
- tom1
- tom2
- tom3
і так далі. Однак такий список НЕ підібраний, тому він не відображатиметься у ваших результатах:
- помідор; регулярний вираз не враховує жодних літер після "tom"
- Том; регламент чутливий до регістру!
Ви також можете вибрати пошук за періодом (.), Який дозволить наявність будь-якого символу, якщо присутній символ.
Як ви можете бачити, прив'язуючи
.tom
не підняв термінів, які мали тільки "том" на початку. Навіть «зелені помідори» прийшли, тому що простір перед «томом» вважається символом, але терміни, такі як «tomF» не мали характеру на початку і, таким чином, ігнорувалися.
Примітка: Поведінка Grep за замовчуванням повертає цілий рядок тексту, коли якась частина відповідає вашому регулярному виразу. Інші програми не можуть це зробити, і ви можете вимкнути цю функцію у grep за допомогою прапора "-o".
Також можна вказати чергування за допомогою труби (|), як тут:
speciali (s | z) e
Тут можна знайти:
- спеціалізуватися
- спеціалізуватися
При використанні команди grep нам потрібно уникнути спеціальних символів (, |, та) із зворотними косою рискою, а також використовувати прапорець "-E", щоб це працювало, і уникати потворних помилок.
Як ми вже згадували вище, це пояснюється тим, що нам потрібно сказати оболонці bash передати ці символи до grep і не робити нічого з ними. Прапор '-E' вказує grep використовувати дужки та труби як спеціальні символи.
Ви можете здійснювати пошук за виключенням, використовуючи каретку, яка знаходиться всередині квадратних дужок і на початку набору:
tom [^ F | 0-9]
Знову ж таки, якщо ви використовуєте grep і bash, не забудьте уникнути цієї труби!
Терміни, які були в списку, але не відображалися, такі:
- tom0
- tom5
- tom9
- tomF
Це не відповідало нашому регулярному виразу.
Як я можу використовувати середовище?
Часто ми шукаємо на основі меж. Іноді нам потрібні лише рядки, які з'являються на початку слова, в кінці слова, або в кінці рядка коду. Це можна легко зробити за допомогою того, що ми називаємо якорями.
Використання каретки (за межами дужок) дозволяє призначити "початок" рядка.
^ tom
Для пошуку кінця рядка використовуйте знак долара.
tom $
Ви можете бачити, що наша рядок пошуку приходить до прив'язки в цьому випадку.
Можна також для збігів, які з'являються на початку або в кінці слів, а не на цілих рядках.
\ T
tom>
Як ми вже згадували в примітці на початку цієї статті, нам потрібно уникнути цих спеціальних символів, тому що ми використовуємо bash. Також можна використовувати одинарні лапки:
Результати однакові. Переконайтеся, що ви використовуєте одинарні лапки, а не подвійні лапки.
Інші ресурси для передових Regexps
Ми тільки вдарили вершину айсберга тут. Ви також можете здійснювати пошук за грошовими умовами, позначеними маркером валюти, і шукати будь-який з трьох або більше відповідних термінів. Речі можуть бути дуже складними. Якщо ви хочете дізнатися більше про регулярні вирази, перегляньте наведені нижче джерела.
- Zytrax.com має кілька сторінок з конкретними прикладами того, чому речі роблять і не збігаються.
- Regular-Expressions.info також містить керівництво по вбивцям для багатьох більш просунутих матеріалів, а також зручна довідкова сторінка.
- У Gnu.org є сторінка, призначена для використання regexps з grep.
Ви також можете створювати та перевіряти регулярні вирази, використовуючи безкоштовний онлайн-інструмент на основі Flash, який називається RegExr. Він працює під час введення тексту, є безкоштовним і може використовуватися в більшості браузерів.
У вас є улюблене використання для регулярних виразів? Знаєте великий пакетний перейменування, який їх використовує? Можливо, ви просто хочете похвалитися вашим греп-фу. Подайте свої думки, коментуючи!