MySQL Regular Expressions - Del 3Introduction Detta är del 3 i min serie, MySQL reguljära uttryck. Jag antar att du har läst den tidigare delen av serien. Detta är en fortsättning. I denna del av serien ser vi på MySQL reguljära uttryck mönsterkonstruktioner. I den förra delen av serien, såg vi några enkla mönster konstruktioner. Här ska vi titta på mer invecklade mönster constructs.
Database bord för Illustration Vi ska använda följande databastabell kallas husdjur, för illustration: | name | ägaren | arter | sex | födelse | död | + -------- + -------- + --------- + ------ + ------------ + - ----------- + | Buffy | Harold | dog | f | 1999/05/13 | NULL | | Bowser | Diane | dog | m | 1999-08-31 | 2005-07-29 | | Fluffigt | Harold Taylor | cat | f | 2003-02-04 | NULL | | Timtim | Gwen Jones | cat | m | 2004-03-17 | NULL | | Whistler | Gwin | bir5d | NULL | 2007-12-09 | NULL | Uppgifterna i denna tabell skiljer sig något från den i tabellen i den tidigare delen av serien.
Du bör vara testa SELECT uttalanden nedan med denna table.The (abc) Konstruera Här (abc) betyder helt enkelt en, två, tre, fyra, fem, etc. tecken inom parentes. I ett mönster, parenteser grupp tecken i en uppsättning. Den uppsättning tecken i mönstret fungerar som ett enda tecken och specialtecken som vi såg i den tidigare delen av serien, kan appliceras på dem som om de vore ett enda tecken. Till exempel kan du ha något liknande, (ab) + (abc) * (abcd) ?, etc.
Följande SELECT-satsen returnerar den fjärde raden i tabellen ovan, matchar fjärde cellvärdet "Timtim" av första kolumnen: SELECT * från husdjur där namn rLike "(tim) +"; Mönstret är "(tim) +". Mönstret matchar ett eller flera (tim) i en patient. Ämnet matchas säga, "Timtim"; det finns två (tim) i ämnet. Om mönstret var, "(tim) *", alla cellvärden i den första kolumnen skulle ha matchat, eftersom * betyder noll eller flera (medan + betyder en eller flera) .Det [[::]] Konstruerar Ett ord är en sekvens av ord tecken som inte föregås av eller följt av ord tecken.
Ett ord karaktär är ett alfanumeriskt tecken eller ett understreck, _. Exempel på ord tecken är: "a", "b", "c", "1", "2", "3", osv markören, [[::]] i ett mönster stämmer överens med slutet av ett ord . Dessa konstruktioner är ord-gränsen markörer. De är inte tecken; de är gräns kännetecken. Följande SELECT-satsen returnerar den fjärde raden i tabellen ovan, matchning "Gwen" i ämnet, "Gwen Jones" av den fjärde cellen i den andra kolumnen: SELECT * från husdjur där ägaren rLike "Gwen [[:>:]] "; Mönstret är "Gwen [[:>:]]". Det börjar med ordet "Gwen" följt av i slutet av ordet markör, [[:>:]].
Så, matchar det "Gwen" och dess ände i ämnet, "Gwen Jones". I ämnet, efter ordet "Gwen", har du en word-gräns före blanksteg. Den [[: Observera att varje ord-gränsmarkör har två par motsatta hakparenteser, två kolon och en character.The [a-dX] och [^ a-dX] Konstruerar Dot specialtecken matchar ett enstaka tecken. Hur är det med fallet när du vill matcha ett enda tecken från en uppsättning tecken? Betrakta orden, "Gwen", "Gwin", "Gwan" och "Gw4n". Orden skiljer sig i karaktären på den tredje positionen.
Det första ordet har "e" i den tredje positionen; det andra ordet har "i" i den tredje positionen; det tredje ordet har "a" i den tredje positionen; och den fjärde ordet har "4" i den tredje positionen. Så du kan vara intresserad av att matcha tecknen, "e", "I", "a" och "4". Detta betyder att du vill matcha ett tecken från uppsättningen, [eia4]. Mönstret i detta fall är "[eia4]", som skulle matcha ett tecken åt en position i ett ämne som är "e" eller "i" eller "a" eller "4".
Följande SELECT-satsen kommer tillbaka den fjärde och femte raderna i tabellen ovan, matchning "Gwen Jones" i fjärde cellen och "Gwin" i femte cellen, allt i den andra kolumnen. SELECT * från husdjur där ägaren rLike "Gw [eia4] n"; Mönstret i uttalandet är "Gw [eia4] n". Ämnena är "Gwen Jones" och "Gwin". Ordet involverade i ämnena är "Gwen" för "Gwen Jones" och "Gwin" för "Gwin". "Gwen" och "Gwin" skiljer sig i den tredje positionen av karaktärerna. Så, i ämnet "Gwen Jones", "e" i "Gwen" matchas och i ämnet "Gwin", "i" matchas.
"e" och "jag" är i den tredje positionen av orden "Gwen" och "Gwin" respektive. I mönstret "Gw [eia4] n", är [eia4] i den tredje positionen. Obs: [eia4] och (eia4) betyder olika saker. [eia4] betyder "e" eller "i" eller "a" eller "4"; medan (eia4) organ behandla uppsättningen av tecken, "eia4", som en enda character.Ranges [eia4] från ovan är ett exempel på en klass. Hur är det med fallet, där du vill ha en match från klassen, [abcde]? Observera att detta är en serie tecken i alfabetet från "a" till "e". [abcde] bättre skrivas som [a-e]. Observera användningen av bindestreck.
Du kan kombinera en rad med enskilda tecken. Till exempel, [a-dX] betyder "a" eller "b" eller "c" eller "d" eller "X", det vill säga intervallet annons och X. Du kan också ha en rad med siffror, t ex [0-5], [3-9], [0-9] förneka klass Om du vill matcha ett tecken på en position i ämnet utom de i klassen, då du skulle använda symbolen ^. Så, om du vill matcha alla tecken utom de i [a-dX], skulle du skriva [^ a-dX] i mönstret. Observera användningen och position ^ i klassen konstruktionen.
Följande SELECT-satsen kommer tillbaka den första och den andra raden, matchning, "hund" i första och andra celler i den tredje kolon: SELECT * från husdjur där arter rLike "d [^ en] g"; Mönstret i rapporten är "d [^ en] g" betyder att inget tecken i området, en bör matchas vid den aktuella tjänsten. Mönstret matchas börjar med 'd', följt av ett tecken som inte finns i området, en, och sedan följt av "g". "o" är inte i området, så "hund" är matched.Formal Teckenklasser Vissa klasser är så viktigt att de har namn.
Följande lista ger namnen på dessa klasser och deras beskrivningar: Namn: Beskrivning alnum: alfanumeriska tecken alpha: Alfabetiska tecken blank: blanktecken CNTRL: Styrtecken siffra: Siffer tecken graf: tecken lägre: gemena bokstäver utskrifts: Grafik eller utrymme tecken punct: Skiljetecken tecken utrymme: Space, tabb, ny rad och vagnretur övre: Versaler bokstäver xdigit: hexadecimal siffra tecken Om du vill använda någon av dessa klasser, du använder markören konstruktionen, [[: namn:]].
Följande SELECT-satsen kommer tillbaka den sista raden i tabellen matchar "bir5d" för siffran, 5, i den femte cellen i den tredje kolumnen: SELECT * från husdjur där arter rLike "bir [[: siffra:]] d"; Mönstret är "bir [[: siffra:]] d". Så att motivet "bir5d", som har den siffra, 5, vid den fjärde positionen matchas. [[: siffra:]] är på fjärde plats av mönstret "bir [[: siffra:]] d" .De x {m} x {m,} och x {m, n} Konstruerar Let m och n vara heltal (heltal). x {m} i ett mönster matchar exakt m konsekutiva förekomster av x. x {m,} matchar minst m konsekutiva förekomster av x.
x {m, n} matchar mellan m och n konsekutiva förekomster av x. Vi tittar nu på några exempel. Mönstret "fe {1} d", matchar ämne "matas", där "e" matchas exakt en gång. Mönstret "fe {1} d", matchar ämnet, "matas" och ämnet "feed", där "e" matchas minst en gång. Mönstret "fe {1,2} d", matchar ämnet, "matas" och ämnet "feed", där "e" matchas minst en gång och högst 2 gånger. Konstruktionerna är inte bara används för ett tecken; de kan också användas för en atom (bit av mönstret). Så, mönstret ", en [BCD] {3} e" matchar ämnet "abcde". Mönstret ", en [BCD] {3,} e" matchar ämnet "abcde".
Mönstret ", en [BCD] {1,10} e" matchar ämnet "abcde". Atomen är [bcd]. Nu, [BCD] betyder 'b' eller 'c' eller 'd'. Så under mönster "[BCD] {3)", betyder "bbb" eller "CCC" eller "ddd" eller "BCB" eller "CBC" eller "DCD" eller "BdB" eller "CDC" eller "dbd" . Under mönster [BCD] {3,} innebär en kombination av åtminstone någon av de tre tecken. Under mönster, [BCD] {1,10} betyder minst ett tecken från de tre tecken, upp till en kombination av 10 tecken från 3 characters.White Space Tecken Vita mellanslag litteraler är: 'b', 't ',' n ',' v ',' f 'och "r".
Namnen på dessa litteraler är respektive backsteg, tabb, ny rad vertikal-tab, form foder och vagnretur. Du kan använda blanktecken litteraler, direkt i mönstret. Anta att du hade följande rad läggas till i tabellen: | Lion | Peter | finsh | f | 2008-12-09 | NULL | Cellen för arter har värdet "finsh", med radmatningstecken, "n". Följande SELECT-satsen kommer tillbaka raden, matchar ämnet "finsh". SELECT * från husdjur där arter rLike "finsh"; Mönstret är "finsh". Du kan också använda namnet på den blanktecken, men i det här fallet, måste du placera den i markören, [[.name.]].
Följande SELECT-satsen returnerar den extra raden som matchar ämnet "finsh". SELECT * från husdjur där arter rLike "fi sh [[newline]..]"; Mönstret är "fi [[. Nyrad.]] Sh". Du kan använda bokstav i markören. Följande SELECT-satsen returnerar den extra raden som matchar ämnet "finsh". SELECT * från husdjur där arter rLike "fi sh [[n]..]"; Mönstret är "fi [[. N.]] Sh" Markören har två par motsatta hakparenteser och två dots.The MySQL reguljära uttryck Metatecken Ett metatecken är ett tecken som används för att kontrollera eller definiera andra tecken.
När det gäller mönster, MySQL reguljära uttryck metatecken är: ^ $. * +? | * {} []: =>