Текстообработка с помощта на Регулярни изрази(RegEx)

Websolut

Well-Known Member
Сигурен съм,че във форума има хора,които много повече разбират от регулярни изрази,но въпреки това реших да направя едно скромно видео и се надявам и по-големите разбирачи да споделят нещо.
Всеки от нас се е сблъсквал примерно с обработка на голям текстов файл в който трябва да премахне елементи или части от текста,които не са му нужни.
Когато елементите са еднакви,няма проблеми Search and replace и готово ,но когато се касае за различни елементи,например URL-та които не са ни нужни,имейли и много други положението се усложнява.
Ако става и въпрос за голям по обем текстов файл,работата става досадна,дори непоносима в един момент.
Аз ще използвам за пример Open Office,който е малко скаран с регулярните изрази,но с малко импровизация става.
Не бъдете много критични,не съм програмист все пак:):arrow:

[video=youtube_share;tRiTDrhdO5M]http://youtu.be/tRiTDrhdO5M?hd=1[/video]
 
От: Текстообработка с помощта на Регулярни изрази(RegEx)

Това съм го правил в базата, със sql.
 
От: Текстообработка с помощта на Регулярни изрази(RegEx)

Добре си си направил труда да направиш клип за RegEx-а, но ще е хубаво да обясняваш и значението на символите вътре. За повечето са неразбираеми комбинации от букви, цифри, скоби и специални знаци.
 
От: Текстообработка с помощта на Регулярни изрази(RegEx)

Щеше да стане много дълго,но по-нататък не пречи.

Ето един прост пример:

Регулярните изрази се заключват между такива скоби [ ],вътре в тях се пишете какво да се търси примерно a-z значи ,че търси всички букви от a до z , 0-9 търси числа от 0 до 9 и примерно звездичка * на края значи,че може да има 0 или повече съвпадения.
Тоест регулярния израз: [a-z0-9]* значи,че търсим букви от a-z,цифри от 0 до 9, които може да се повтарят 0 или повече пъти.
Тоест в текста Obicham Sladoled ot 5lv.:) ,този регулярен израз ще открие само малките букви цифрата и ще пропусне интервала и точката,ако му дадем Search and replace,заместване с нищо от текста ще остане следното:
O S .:)
Първото нещо,което трябва да направите е да научите всички основни регулярни изрази и после да експериментирате.
За да ги разберете по-добре,хубава работа върши програмата RegexBuddy,има и онлайн тулове.
Малко е объркващо в началото,но схванете ли принципа,разбирате,че не е кой знае колко сложно,а спестявате толкова нерви и време.
 
Последно редактирано:
От: Текстообработка с помощта на Регулярни изрази(RegEx)

Преди време бях писал някакво кратко ръководство за регълярни изрази. Сега ще се опитам сбито да обясня същото.

Цел на регулярните изрази:
Чрез регулярен израз се описва по-конкретно или по-общо текст в текста (под "текст" разбирайте "поредица от знаци").

Всеки знак означава себе си освен ако не е специален. Ето няколко специални знаци (понякога са по два):
- "." - кой да е знак (един)
- "\d" - цифра
- "\w" - буква (латински и други в зависимост от машината за регулярни) или цифра
- "\s" - някакъв white space (интервал, нов ред, таб,..)

Специални знаци указващи нещо към знакът (или поредица от знаци оградена със скоби) преди тях:
- "+" - Предният знак трябва да го има веднъж или повече пъти.
- "*" - Предният знак трябва да да го има нула (т.е. да го няма) или повече пъти.
- "?" - Предният знак трябва да го има нула (т.е. да го няма) или един път (т.е. да го има).
- "{A,B}" - Па мястото на буквите "A" и "B" се слагат цифри, които указват колко пъти трябва да се повтаря предният знак. Ако имаме "{3,5}", това означава, че предният знак трябва да го има от 3 до 5 пъти (т.е. и 4 пъти става). На мястото на което и да е от двете може да оставите празно. Ако първото е празно, това означава от 0 пъти (т.е. може и да го няма), а ако второто е празно, това означава до безкраен брой пъти.
- "?" приложено след "+" или "*" - най-краткото възможно (нали тези два знака указват "или повече пъти")

Ако искате да укажете буквално конкретен знак, който e специален (т.е. не смисъла му като специален, а самият той), тогава пред него слагате "\").

Изброяване на варианти за знак на една позиция:
"[abcdef]" - Това описва само един знак, който може да е който и да е от изброените, но не и друг.
"[a-q3-8]" - Същото, но в случая са зададени интервали
"[^a-f^3-5]" - Знакът "^" указва, отрицание за знака или интервалът след него, т.е. "не това".

Хващане на важните части:
Каквото ви интересува го ограждате с кръгли скоби. Всяко оградено става елемент с пореден номер броено отляво надясно започвайки от елемент номер 1 (не от номер 0). Ако имаме скоби в скоби, тогава по-преден е този с по-вляво разположена отваряща скоба.

За какво са ви тези хванати неща:
Ако ви трябват конкретни данни, точно хванатите неща са търсеното.
Може да ги ползвате и при замяна, но това е по-сложно нещо и няма да го обяснявам сега.

Има и още неща, но мисля, че на начинаещите им стига толкова. Отделно, че ме мързи да пиша повече.
 
Последно редактирано:
От: Текстообработка с помощта на Регулярни изрази(RegEx)

Браво Unwise,само,че според мен първо трябва да се научи дългия вариант на регулярните изрази и после съкратения,защото съкратения е малко объркващ в началото,а и много текстообработващи програми не бачкат със съкратения вариант.
 
Unwise, браво за труда! Дано помогне на повече хора да достигнат до знанието на регулярните изрази.

buymore, май само ти си знаеш какво каза в последния си пост? За какъв съкратен дълъг и съкратен формат говориш?:)

Цялата тази лудница дето я направи може да се напише с точно един регулярен израз, а не с два.
 
От: Текстообработка с помощта на Регулярни изрази(RegEx)

Споменал съм,че не съм голям спец така,че е нормално:),дълъг вариант имам в предвид a-z0-9 и така нататък ,а не \w,объркващо е в началото.
 
От: Текстообработка с помощта на Регулярни изрази(RegEx)

Абе, то има и още, но ще стане дълго. Някои неща от PCRE не се поддържат от някои по-елементарни програми.
Тези регулярни са одъртяли и тепърва ще навлизат новите регулярни на Perl 6, но да почакаме и да видим.

Въпрос:
К'ви са тези дълги и кратки варианти? Регулярните са си просто регулярни.
 

Горе