Latest web development tutorials

Wyrażenia regularne - zasady dopasowania

Podstawowy wzorzec dopasowania

Wszystko rozpoczyna się od podstaw. Wzór jest wyrażeniem regularnym jest najbardziej podstawowe elementy, które charakteryzują się ciągiem znaków opis grupy. Tryb ten może być bardzo prosty, składający się z zwykłych strun, może być również bardzo skomplikowane, często stanowią zakres znaków ze znakami specjalnymi, powtarzających się lub reprezentuje kontekst. Na przykład:

^once

Model ten zawiera znak specjalny ^, wskazując, że wzorzec pasuje tylko raz te zaczynają sznurkiem. Na przykład ciąg wzór "once upon a time" meczu nie pasuje "Był sobie kiedyś człowiek z NewYork". Jako taki symbol ^ oznacza początek tego samego $ symbole odpowiadają tym łańcuchy na końcu danego trybu.

bucket$

Model i "Kto utrzymuje się z gotówki w wiadrze" meczu nie zgadza się z "wiadra". ^ I $ znaków stosowany jednocześnie stanowi dokładne dopasowanie (tryb ciąg AS). Na przykład:

^bucket$

Pasuje tylko ciąg "wiadro". Jeżeli model nie uwzględnia ^ i $, zawiera ciąg pasujące do dowolnego wzoru. Na przykład: tryb

once

sznurkiem

There once was a man from NewYork
Who kept all of his cash in a bucket.

Mecz.

Litery (raz) w tym trybie jest dosłownym charakter, to znaczy, że mówi sama litera, liczba ta jest taka sama. Niektóre inne nieco bardziej złożone, takie jak znaki interpunkcyjne i białe znaki (spacje, tabulatory, itp), należy użyć sekwencji ucieczki. Wszystkie sekwencje zaczynając od backslash (\). Tabs uciec sekwencji jest: \ t. Więc jeśli chcemy sprawdzić, czy ciąg począwszy karcie, można użyć tego trybu:

^\t 

Podobnie, reprezentowana przez \ n "nowej linii", \ r powrotnej karetki. Inne symbole specjalne mogą być stosowane przed backslashem, takich jak backslashem sam z \\ wspomnianym okresie. Z \. Przedstawicielstwo, i tak dalej.

charakter klastra

Program w Internet, wyrażenie regularne jest często używany do sprawdzania poprawności danych wprowadzanych przez użytkownika. Gdy użytkownik wysyła formularz, a następnie wprowadź numer telefonu, który chcesz ocenić, adres, adres e-mail, numer karty kredytowej jest ważne, z ogólnym charakterem oparciu o dosłowne nie wystarczy.

Tak więc, aby używać więcej wolnego modelu opisać nasze podejście, to gromady postaci. Aby utworzyć reprezentację znaku całego klastra samogłosek, umieścić wszystkie charakteru samogłosek w kwadracie nawiasach:

[AaEeIiOoUu]

Ten wzorzec pasuje dowolne znaki samogłosek, a jedynie stanowią znak. Z łącznikiem może reprezentować zakres znaków, takich jak:

[a-z] //匹配所有的小写字母 
[A-Z] //匹配所有的大写字母 
[a-zA-Z] //匹配所有的字母 
[0-9] //匹配所有的数字 
[0-9\.\-] //匹配所有的数字,句号和减号 
[ \f\r\t\n] //匹配所有的白字符

Podobnie, te stanowią jedynie znak, to jest bardzo ważne. Jeśli chcesz dopasować małą literę i jeden po drugim ciągiem liczb, takich jak "Z2", "t6" lub "G7", ale nie "AB2", "r2d3" lub "B52", a następnie użyć tego wzoru:

^[a-z][0-9]$

Chociaż [AZ] w imieniu 26 liter zakresie, ale tutaj jest to tylko pierwszy znak to małe dopasowanie ciąg.

Jak wspomniano wcześniej ^ oznacza początek napisu, ale ma też inne znaczenie. W przypadku stosowania w zestawie nawiasach kwadratowych ^ jest to, że oznacza to "Nie" lub "zamknięta" oznacza, często stosowany do usuwania znaku. Również użyć w poprzednim przykładzie, pytamy pierwszy znak nie może być wiele:

^[^0-9][0-9]$

Ten tryb "i 5", "G7" i "-2" jest dopasowany, ale z "12", "66" nie pasuje. Oto kilka przykładów wykluczyć określone znaków:

[^a-z] //除了小写字母以外的所有字符 
[^\\\/\^] //除了(\)(/)(^)之外的所有字符 
[^\"\'] //除了双引号(")和单引号(')之外的所有字符

Znak specjalny "." (kropka, kropka) w wyrażeniu regularnym używane do reprezentowania dodatek do "nowej linii" wszystkich znaków. Tak więc wzór "^ 0,5 $", a każde dwa znaki na koniec numer 5 i łańcuch dopasowania w inny znak "nowej linii" nie-na początku. Tryb "." Czy pasuje dowolny ciąg, oprócz pustego łańcucha, i zawiera tylko "nowa linia" ciąg.

PHP wyrażenie regularne ma pewne wbudowanym uniwersalnym zestawie znaków, lista przedstawia się następująco:

字符簇 描述
[[:alpha:]] 任何字母
[[:digit:]] 任何数字
[[:alnum:]] 任何字母和数字
[[:space:]] 任何空白字符
[[:upper:]] 任何大写字母
[[:lower:]] 任何小写字母
[[:punct:]] 任何标点符号
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]

OK powtarzane

Do tej pory, to już wie, jak dopasować literę lub cyfrę, ale więcej przypadków, można dopasować słowo lub zestaw liczb. Słowo ma szereg liter, grupę kilku postaci w liczbie nieparzystej. Z znaku lub znaków za klastra klamrowych ({}) stosuje się w celu określenia liczby powtórzeń poprzedzającego zawartości.

字符簇 描述
^[a-zA-Z_]$ 所有的字母和下划线
^[[:alpha:]]{3}$ 所有的3个字母的单词
^a$ 字母a
^a{4}$ aaaa
^a{2,4}$ aa,aaa或aaaa
^a{1,3}$ a,aa或aaa
^a{2,}$ 包含多于两个a的字符串
^a{2,} 如:aardvark和aaab,但apple不行
a{2,} 如:baad和aaa,但Nantucket不行
\t{2} 两个制表符
.{2} 所有的两个字符

Te przykłady opisują wykorzystanie trzy różne aparaty ortodontyczne. Szereg {x} oznacza "znak lub znaki przed klastra pojawia się tylko x razy"; numer przecinek, {x} oznacza "zawartość pojawia się przed szereg razy x lub więcej"; dwa z oddzielonych przecinkami liczb, że {x, y} "zawartość przed co najmniej pojawiają x razy, ale nie więcej niż y czas." Możemy rozszerzyć model do kilku słów i liczb:

^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串 
^[1-9][0-9]*$ //所有的正数 
^\-{0,1}[0-9]{1,}$ //所有的整数 
^[-]?[0-9]+\.?[0-9]+$ //所有的浮点数

Ostatni przykład nie jest dobrze poznany, prawda? Tak Kanba: (? [-]) (. \) I każdy z opcjonalnym znakiem minus Na początku (^), a następnie przez jeden lub więcej znaków ([0-9] +), a kropki dziesiętnej Talk na jednej lub więcej cyfr ([0-9] +), a nie jest po cokolwiek innego ($). Poniżej dowiesz się więcej prosta metoda może być stosowana.

"?" I znaki specjalne {0,1} są równe, stanowią one: "0 lub 1 z przodu" lub "przed treścią jest opcjonalne." Więc tylko przykłady można uprościć:

^\-?[0-9]{1,}\.?[0-9]{1,}$

znak specjalny "*" i {0} są równe, wszystkie one stanowią "0 lub więcej z poprzednich zawartości". Wreszcie, znaki "+" i {1} jest równa, to oznacza "jeden lub więcej z powyższych zawartości", a więc powyższe cztery przykłady można zapisać jako:

^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串 
^[0-9]+$ //所有的正数 
^\-?[0-9]+$ //所有的整数 
^\-?[0-9]*\.?[0-9]*$ //所有的浮点数

Oczywiście, to nie jest zasadniczo zmniejszyć złożoność techniczną wyrażeń regularnych, ale może sprawić, że łatwiejsze do odczytania.