Mga regular na expression (na may mga halimbawa) - 1

"At ngayon sasabihin ko sa iyo ang tungkol sa mga regular na expression. Ang paksang ito ay parehong kumplikado at simple sa parehong oras. Upang lubusang maunawaan ang mga regular na expression, maaaring kailanganin mong magbasa ng dalawa o tatlong mabigat na libro, ngunit maaari kitang turuan kung paano gamitin ang mga ito. ngayon na."

"Tulad ng mga bihasang programmer na gustong magbiro, kung mayroon kang problema at sa tingin mo ay malulutas mo ito gamit ang mga regular na expression, mayroon kang dalawang problema."

"Hmm."

"Sana hindi kita masyadong tinakot, kaibigan. Hindi?"

"Okay, good. So, regular expressions ang bago nating topic."

"Kung pinasimple natin ang mga ito, ang mga regular na expression ay mga pattern para sa mga string."

"Maaari mong tingnan kung ang isang string ay tumutugma sa isang partikular na pattern. Maaari mo ring hatiin ang isang string sa mga bahagi gamit ang isang delimiter o isang pattern."

"Ngunit magsimula tayo sa isang bagay na simple: ano ang isang pattern? "

"Sa SQL (ngunit hindi sa Java), maaari mong suriin kung ang isang string ay tumutugma sa isang partikular na pattern. Ganito ang hitsura nito:"

name like 'Alex%'

Narito ang pangalan ay isang variable, tulad ng isang command upang suriin ang isang pattern, at "Alex%" ay ang pattern.

Sa kasong ito, ang % ay nangangahulugang anumang string o substring.

Pattern Mga string na tumutugma sa pattern
'Alex%' Alex
Alex andr
Alex ander
Alex andra
….
'%x%' Ma x
Ma x im
Ale x andr
'%a' Olg at
Helen at
Ir a

"Sa SQL, kung kailangan mong tukuyin na dapat ay mayroon lamang isa pang character, pagkatapos ay gagamitin mo ang underscore na character: "_"."

Pattern Mga string na tumutugma sa pattern
'Alex%_' Alex
Alex andr
Alex ander
Alex andra
….
'_x' Ax
Bx
Cx
'___' Aaa
Aab
Bbb

"Iyan ang akma."

"Okay, then let's move on to regular expressions."

"Karaniwang kasama sa mga regular na expression ang paghihigpit hindi lamang sa bilang ng mga character, kundi pati na rin sa kanilang 'content'. "Ang anumang maskara ay karaniwang binubuo ng dalawa (minsan higit pa) bahagi: ang una ay naglalarawan ng 'mga kagustuhan' ng character, at ang pangalawa ay naglalarawan sa bilang ng mga character. ."

"Narito ang ilang mga halimbawa ng nilalaman :"

Pattern Paglalarawan Mga halimbawa
. Kahit sinong karakter 1
\d Kahit anong digit 7
\D Anumang non-digit C
\s Isang espasyo, line break, o character ng tab ''
\S Anuman maliban sa mga espasyo, tab, at line break f
[az] Anumang titik mula a hanggang z z
[0-9] Anumang digit mula 0 hanggang 9. 8
\w Kahit anong salita character c
\W Anumang hindi salita na karakter _

"Hindi ko agad maaalala ang mga iyon, ngunit mukhang hindi masyadong mahirap."

"Magaling, narito ang mga halimbawa ng bilang ng mga character sa isang maskara: "

Pattern Paglalarawan Mga halimbawa
A? Ang karakter na 'A' ay nangyayari nang isang beses o hindi A
B+ Ang karakter na 'B' ay nangyayari nang isa o higit pang beses BBBB
C* Ang character na 'C' ay nangyayari sa zero o higit pang beses CCC
D{n} Ang karakter na 'D' ay nangyayari nang n beses Ang pattern na D{4} ay tumutugma sa DDDD
E{n,} Ang karakter na 'E' ay nangyayari ng n o higit pang beses Ang pattern na E{2,} ay tumutugma sa EEEEEEE
F{n,m} Ang character na 'F' ay nangyayari sa pagitan ng n at m beses Ang pattern na E{2,4} ay tumutugma sa EEEE

"Mukhang medyo prangka ang lahat ng iyon."

"Nakakakuha ka ng lahat ng bagay nang napakabilis. Ngayon tingnan natin kung paano ito magkakasama:"

Pattern Paglalarawan Mga halimbawa
[Ad]? Ang isang character sa pagitan ng 'a' at 'd' ay nangyayari nang isang beses o hindi a B C D
[bd,z]+ Ang mga character na 'b', 'c', 'd', o 'z' ay nangyayari nang isa o higit pang beses b, bcdcdbdbdbdbzzzzbbzbzb, zbz
[1,7-9]* Ang mga digit na 1, 7, 8, o 9 ay nangyayari sa zero o higit pang beses 1, 7, 9, 9777, 111199
1{5} Ang digit 1 ay nangyayari nang 5 beses 11111
[1,2,a,b]{2}{101} Ang mga simbolo 1, 2, 'a', o 'b' ay nangyayari nang dalawang beses 11, 12, 1a, ab, 2b, bb, 22
[a,0]{2,3} Ang mga simbolo na 'a' o 0 ay nangyayari nang 2 o 3 beses aa, a0,00,0a, aaa,000, a00,0a0, a0a

"Malinaw pa rin ang lahat."

"Talaga? Hmm. Either I explained everything really well or you're too quick on the uptake. Well, either way, that's good for us."

"Narito ang ilang bagong insight para sa iyo."

"Dahil ang mga regular na expression ay kadalasang ginagamit upang maghanap ng mga substring, maaari kaming magdagdag ng dalawa pang character (^ at $) sa aming mga pattern."

"^ ay nangangahulugan na ang substring ay dapat isama ang simula ng string."

"Ang ibig sabihin ng $ ay dapat isama ng substring ang dulo ng string."

"Narito ang ilang mga halimbawa:"

Pattern String at substrings na tumutugma sa pattern
isang{3} aaa  a  aaa  a  aaa
isang{3}$ aaa a aaa a  aaa
^a{3} aaa  a aaa a aaa
^a{3}$ aaa a aaa a aaa

"At isa pang mahalagang punto."

"Sa mga regular na expression, ang mga sumusunod na character ay may espesyal na kahulugan: [ ] \ / ^ $ . | ? * + ( ) { }. Tinatawag silang mga control character. Kaya, hindi mo basta-basta magagamit ang mga ito sa mga string."

"Tulad ng sa Java code, dapat silang makatakas. "At muli tulad ng sa Java code, ang '\' character ay ginagamit para dito."

"Kung gusto nating ilarawan ang isang string na binubuo ng tatlong '?' mga character, hindi namin maisulat ang '?{3}', dahil '?' ay isang control character. Kailangan nating gawin ito tulad nito: \?{3}. Kung gusto nating gumamit ng character na '\', kailangan nating isulat ang '\\'."

"Okay, nakuha ko."

"At ngayon narito ang isa pang kawili-wiling balita. Sa mga file na may Java code, ang '\' character ay dapat ding i-escape sa mga string, dahil ito ay isang control character."

"Syempre."

"Kaya, kung sinusubukan mong tukuyin ang isang regular na expression ng Java sa isang string, kailangan mong i-escape ang character na '\' nang dalawang beses."

"Narito ang isang halimbawa:"

Gusto ko ng maskara na tumutugma sa 'c:\anything'
Sa teorya, ang regular na expression ay dapat magmukhang ganito:
isang 'c' na character,
colon,
backslash,
tuldok, at asterisk (upang tukuyin ang anumang bilang ng mga character). Nagdagdag ako ng mga puwang upang mapabuti ang pagiging madaling mabasa:
c : \ .*
Ngunit ang mga character na '\' at '.' kailangang i-escape, kaya ang regular na expression ay magiging ganito:
c :   \\ \. *
O, nang walang mga puwang
c: \\ \. *
"Dapat tayong magkaroon ng tatlong backslashes sa ating regular na expression.
Nangangahulugan iyon na sa isang Java file ang regular na expression ay magiging ganito:"
String regexp = "c: \\\\ \\. *";

"Wow! Whoa. Ngayon alam ko na."

"At kung magpasya kang maghukay ng mas malalim dito, narito ang ilang magagandang link:"

Aralin sa Wikipedia