Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Регулярни изрази и референции
  1. Регулярни изрази и референции - 1
  2. Регулярни изрази и референции - 2
  3. Регулярни изрази и референции - 3
     
Автор  eminem (05.02.2005 14:57)  съобщение до автора
Погледнат  4309 пъти  добави към любими
Оценка  добави коментар
Гласове  5  изпрати на приятел
Коментари  (0)  абонирай се за Perl
    Страница 1 / 3

 



Регулярни изрази


Общо представяне
Регулярните изрази ни позволяват да търсим шаблони в данните си. Повечето букви и символи просто ще съвпадат със самите себе си. Например, регулярният израз "test" просто и точно ще съвпада със символния низ "test". Можете да включите режим, нечувствителен към разликата между малки и големи букви, който ще позволи да съвпадне също така и с "Test" или "TEST". Има изключения от това правило, някои символи са особени и не съвпадат със самите себе си. Вместо това те сигнализират, че имат специално значение и трябва да се разглеждат със различно значение от това просто как изглеждат. Например w не е ескейпвана w, а нещо друго - всяка една буква или цифра от 0 до 9. Голяма част от този документ е посветена на обсъждането на различни метасимволи и тяхното действие. Ето един пълен списък на метасимволите:

CODE
1
| ( ) [] {} ^ $ * + ? .

Може да се изключат специалните значения, използвайки ескейп последователността Q - след нея 14 специални знака по-горе автоматично приемат своите обикновенни буквални значения. Това е дотогава, докато Perl не види E или края на шаблона. Например Q$futureE, спира интерпретирането на променливите.
Първият метасимвол, на който ще обърнем внимание с "[]". Използват се за определяне на клас от символи, представляващ набора от символи, които искате да използвате за съвпадение. Символите могат да бъдат изброявани индивидуално или един диапазон от символи може да бъде обозначен чрез два символа и разделител "-". Например, [abc] ще пасне с всички символи "a", "b", или "c"; това е същото както [a-c], където се използва диапазон, за да изрази същия набор от символи. Ако искате да пасне, с която и да е малка буква от латинската азбука, то би трябвало да бъде [a-z]. Метасимволите не са активни вътре в класовете. Например [akm$] ще пасне с всеки от символите "a", "k", "m", или "$"; "$" обикновено е метасимвол, но вътре в класа от символи той е лишен от особенната си природа. Допълвайки набора, можете да пасвате символи, които не са в дадения диапазон. Това се посочва чрез добавянето на "^" като първи символ от класа. Поставен където и да е другаде, "^" просто ще съвпада със символа "^". Например, [^5] ще пасне с всеки символ, с изключение на "5". Може би най-важният метасимвол е обратно наклонената черта, "". Обратно наклонената черта може да бъде последвана от различни символи, за да се обозначат различни специални последователности. Тя също се използва и за да се избегнат всички метасимволи, така че все пак да можете да ги използвате за съпоставка в образци. Например, ако искате да съвпаднете "[" или "", те трябва бъдат предшествани от обратно наклонена черта за да се премахне специалното им значение: [ или . Някои от тези специални последователности представят предварително дефинирани набори от символи, които много често влизат в употреба, като например наборът от цифри, или наборът от латински букви, или наборът от всички символи, които не са празни (whitespace). На разположение са следните предварително дефинирани специални последователности:

d - Пасва с всяка десетична цифра; това е еквивалент на класа [0-9].
D - Пасва с всеки символ, който не е цифра; това е еквивалент на класа [^0-9].
s - Пасва с всеки празен символ; това е еквивалент на класа [ tnrfv].
S - Пасва с всеки не-празен символ; това е еквивалент на класа [^ tnrfv].
w - Пасва с всеки буквеноцифров символ; това е еквивалент на класа [a-zA-Z0-9_].
W - Пасва с всеки не-буквеноцифров символ; това е еквивалент на класа [^a-zA-Z0-9_].

Тези последователности могат от своя страна да бъдат включвани в класове от символи. Например, [s,.] е клас от символи, който пасва с всеки празен символ, или "," или ".".

Първият метасимвол за повторения, който ще разгледаме, е *. * не съвпада буквално със символа "*"; вместо това, той указва, че предшестващият символ трябва да се среща нула или повече пъти, вместо точно веднъж. Например, ca*t ще пасне с "ct" (0 символа "a"), "cat"(1 "a"), "caaat" (3 символа "a"), и тъй нататък.
Да разгледаме израза a[bcd]*b. В началото той пасва с буквата "a", после с нула или повече букви от класа [bcd], и накрая завършва с "b".
Друг метасимвол за повторение е +, който пасва един или повече пъти. Обърнете внимание на разликата между * и +; * пасва нула или повече пъти, така че, това което трябва да се повтаря може изобщо да не се среща, докато + изисква минимум едно срещане. За да използваме подобен пример, ca+t ще пасне с "cat" (1 символ "a"), "caaat" (3 символа "a"), но няма да пасне с "ct".
Съществуват още два квалификатора за повторение. Въпросителният знак ? пасва с едно или с нула повторения. Можете да мислите за него като за белег за нещо незадължително. Например, пиво-?варна пасва хем с "пивоварна", хем с "пиво-варна".
Друг квалификатор е {m,n}, където m и n са десетични числа. Той обозначава, че трябва да има поне m на брой повторения, но най-много n. Например, a/{1,3}b ще пасне с "a/b", "a//b", и "a///b". Но няма да пасне с "ab", защото не съдържа наклонени черти, или с "a////b", защото съдържа четири.

Можете да изпуснете някоя от стойностите на m или n - например {,4} или {2,}. В такъв случай, на нейно място се приема някаква разумна стойност. Изпускането на m се тълкува като 0 за долна граница, докато изпускането на n води до установяването на безкрайността като горна граница.

Читателите от редукционалисткия лагер може би са забелязали, че останалите 3 квалификатора също могат да бъдат изразени чрез тази система за означаване. {0,} е същото като *, {1,} е еквивалент на +, и {0,1} е същото като ?. Но е по-добре да използвате *, +, или ?, просто защото те са по-кратки и лесни за четене.


Регулярният израз се задава така $http=~m/^http://([^/]+)(.*)/. В края на него може да се окажат модификатори, които повлияват на интерпретирането на самия рефулярен израз - променя неговото поведение. Значението на модификаторите е следното:
i     Игнорира големината на буквите, които се срещат в изследвания стринг.
m     Третира низ като съставен от много редове. Например "onentwo".
s     Третира стринга като съставен от един ред. Позволява използването на "." за намирането на символа за нов ред.
x     Игнорира празните места и символа за нов ред в регулярния израз. Позволява писането на коментари.
  •     Компилира регулярния израз само веднъж.
g     Открива всички съвпадения в дадения стринг (не спира при първото съвпадение). Ако се постави котвата /G в началото на регулярния израз ще го закотви в крайната точка на последното съвпадение.

Друг начин на писане на коментари в регулярните изрази е чрез (?#). Например:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/Stoyan (?# This is me) e pich/
Ако имате модификатор, от който искате да се оттървете временно меже да използвате
(?-x)

/
Stoyan ((?-i) e pich)/i;
За да погледнем напред, за търсена дума и само тогава стринга да има съвпадение използваме:

/
Stoyan (?=e pich)/i;
За негативно използваме:

/
Stoyan (?!e pich)/i;
За поглед назад:

/
Stoyan (?<=e pich)/i;

[b]Мета символи[/b]
.     Съвпада с всеки символ с изключение на нов ред
[..]     Съвпада с всеки символ в скобите.
[^...]     Съвпада с всеки символ, освен с тези в скобите.



  Следваща страница >> 


Ключови думи: perl програмиране шаблон регулярен израз


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008