*   >> lukeminen koulutus Artikkelit >> tech >> web development

Rakennus Vakiolausekehaku vuonna Php

PHP säännöllisiä lausekkeita - VI osa Johdanto Monet esimerkkitapaukset olemme törmännyt ovat yksinkertaisia ​​esimerkkejä. Tässä osassa tarkastelemme kaksi esimerkkiä, jotka ovat vaativampia. Ennen jätämme tämän osan sarja, me puhumme mitä kutsutaan vetäytymistä. Tarvittavat toimenpiteet rakentaa Regex Nämä ovat tarvittavat toimenpiteet rakentaa regex: * Määritä tehtävän yksityiskohtaisesti, * Murra ongelma pienempiin osiin, * Käännä pieniä osia osaksi regexes, * Yhdistä regexes, * Optimoi lopullinen yhdistetyn regexes.

Kaksi Esimerkit Esimerkki 1 värin heksadesimaalikoodi Tarkista määrittäminen Tehtävä yksityiskohtaisesti esimerkki heksadesimaalinen väri koodi on # 4C8. Toinen esimerkki on # 44CC88. * Heksadesimaalikoodia alkaa hash, jota seuraa joko 3 heksadesimaalilukuina tai 6 heksadesimaalilukuina. * Heksadesimaalilukua ovat: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, ja F * heksadesimaali kirjaimet voi olla alhaisempi tai isoilla kirjaimilla. Breaking Down ongelma pienempiin osiin * Se alkaa #.

* Sitä seuraa 3 heksadesimaalilukuina tai * 6 heksadesimaalilukuina * Ei ole merkki jälkeen 3 tai 6 heksadesimaalinumeroa. Kääntää regexes On kolme pieniä osia edellä. Ensimmäinen osa antaa regex: /^ # /toinen osa antaa regex: /[0-9a-FA-F] {3} /Kolmas osa antaa regex: /[0-9a-FA-F] { 6} /viimeinen osa antaa regex: /$ /Yhdistämällä regexes Tämä on yhdistetty regex: /^ # ([0-9a-FA-F] {3} $) | ([0-9a-FA-F ] {6} $) /Huomautus vaihtoehtoinen metamerkki, | kolmen tai kuuden heksadesimaalinumeroa. Huomaa myös, suluissa jotka erottavat vaihtoehtoinen ryhmiä.

Optimointi yhdistetyn Regex Tämä tarkoittaa lyhentää yhdistetyn regex. Huomaa, että 0-9 lyhennetään \\ d. Joten yhdistetyssä regex, muutamme kahden esiintymät 0-9 \\ d. Optimoitu regex on: /^ # ([\\ da-FA-F] {3} $) | ([\\ da-FA-F] {6} $) /Tämä ilmaus on lyhyempi kuin edellä kaksi merkkiä. Seuraava koodi kuvaa tätä: $ aihe = "# 44CC88"; jos (preg_match ("/^ # ([\\ da-FA-F] {3} $) | ([\\ da-FA-F] {6} $) /", $ aihe)) echo "Hyväksytty". "Muu echo" ei vastaa ".

"?> Esimerkki 2 käyttäjänimi Tarkista määrittäminen Tehtävä yksityiskohtaisesti Oletetaan, että meillä on sivusto, jossa käyttäjät on kirjauduttava. Voimme kertoa käyttäjälle, että hänen nimensä pitäisi olla kirjaimia pienillä tai isoilla kirjaimilla ja /tai numerot nollasta 9 ja /tai alaviivaa _. Vaadimme myös, että nimi ei saa olla pienempi kuin 3 merkkiä tai suurempi kuin 18 merkkiä. Tässä esimerkissä ovat määränneet erittelytiedot.

Breaking Down ongelma pienempiin osiin kirjautuminen nimi koostuu * aakkosten pienillä tai isoilla kirjaimilla välillä 3-18 kirjainta, osallistavaa, ja /tai * numeroa 0-9 välillä 3-18 numeroa, osallisuutta, ja /tai * alaviiva välillä 3-18 numeroa, osallistava. Tämä tarkoittaa, voit olla jopa 18 alaviivoiksi nimityksen. Antakaamme että yksinkertaisuuden. * Meidän on rajoitettava aihe merkkijono 3 tai 6 merkkiä.

Kääntää regexes regex ensimmäistä piste on: /^ [AZ az] {3,18} $ /regex toisen piste on: /^ [0-9] {3,18} $ /regex kolmannen piste on: /^ [_] {3,18} $ /Neljäs kohta on luonnostaan ​​edellä regexes. Yhdistämällä regexes tauko alas osiossa, edellä kolme pistettä yhdistetään lause, "ja /tai" ei ole suoraa tapa tehdä tämä, joten meidän täytyy päätellä sitä. Tämä on yhdistetty regex: /^ [-ZA-Z0-9 _] {3,18} $ /optimointi yhdistetyn Regex Tämä tarkoittaa lyhentää yhdistetyn regex. Huomaa, että luokka [-ZA-Z0-9_] lyhennetään \\ w.

Optimoitu regex on: /^ [\\ w] {3,18} $ /vetäytymistä Olemme nähneet, miten vastaamaan vaihtoehtoja käyttäen vuorottelu metamerkki, |. Kun vastaavia vaihtoehtoja, PHP käyttää prosessia kutsutaan vetäytymistä. Aion havainnollistaa tätä esimerkkiä. Harkitse seuraava lauseke: preg_match ("/(124 | 123) (46 | 4 | 45) /", "12345") Selitän vetäytymistä selittämällä toiminnan edellä ilmaisua. Seuraavassa kuvataan, miten PHP korjaa tämä ilmaus. A. Se alkaa ensimmäinen numero aihe merkkijono "1". B. Se yrittää ensimmäisen vaihtoehdon ensimmäisen subpattern "124". C.

Se näkee yhteensovittaminen "1", jota seuraa "2". Se on kunnossa. D. Se huomaa, että "4 'regex ei vastaa' 3 'aihe merkkijono - joka on umpikuja. Joten se backtracks kaksi merkkiä aihe merkkijono ja poimii toisen vaihtoehdon ensimmäisen subpattern "123". E. Se vastaa "1", jota seuraa "2", jota seuraa "3". Ensimmäinen subpattern täyttyy. F. Se siirtyy toiseen subpattern ja poimii ensimmäinen vaihtoehto "46". G. Se vastaa "4 'subpattern merkkijono. H. kuitenkin "6" vuonna regex ei vastaa "5" vuonna subpattern merkkijonon, niin että on umpikuja.

Se backtracks yksi merkki subpattern merkkijono ja poimii toisen vaihtoehdon toisessa subpattern "4". I '4' ottelunsa. Toinen subpattern täyttyy. J. Olemme lopussa regex; olemme valmiit! Olemme Hyväksytty "1234" ulos aihe merkkijono "12345". On kaksi asiaa huomata tästä prosessista. Ensinnäkin, kolmas vaihtoehto toisessa subpattern "45" mahdollistaa myös ottelu, mutta prosessi keskeytyi ennen sai kolmas vaihtoehto - tietyssä merkin asema, vasemmanpuoleisin valloittaa. Toiseksi, prosessi oli mahdollisuus saada ottelun ensimmäisen merkin paikan aihe merkkijono "1".

Jos ei olisi ottelunsa ensimmäisessä asennossa, PHP muuttaisi toiseen merkkipaikkaan "2" ja yrittää ottelu uudestaan. PHP luopuu ja julistaa "12345" = ~ /(124 | 123) (46 | 4 | 45) /, vääräksi, vasta kun kaikki mahdolliset polut suinkin mahdollista merkkipaikkaa on käytetty. X muokkaaja tiedot Tämä muuntoainetta asetetaan laittamalla x pienellä aivan toinen vinoviiva on regex.

Eli: /malli /x Jos tämä muuntoainetta on asetettu, välilyönnit datamerkistä rakenteessa ovat täysin huomiotta paitsi kun karannut tai sisällä luonne luokan ja merkkien välillä ilman ohjausmerkkiä # ulkopuolella luonne luokan ja seuraava Rivinvaihtomerkkiä, osallistavaa, ovat myös huomiotta. Annan esimerkin kaiken tämän. Siinä sanotaan välilyönnillä datamerkistä rakenteessa ovat täysin huomiotta paitsi kun karannut tai sisällä merkki luokassa. Harkitse aihe merkkijono: $ aihe = "Olen mies istuu alas."; Seuraava lauseke kanssa x modifier ei tuota ottelussa.

preg_match ("/mies istuu alas /X", $ subject) Tämä johtuu siitä regex, yhden väli "mies" ja "istuu" ja "istuu" ja "alas" ei tunnusteta, läsnäolo X muokkaaja. Jos poistat nämä vastaavat tilat aihe sinulla on ottelu, jossa x muuntaja. Seuraavat aihe tuottaa ottelun edellä regex: $ aihe = "Olen mansittingdown."; Jos haluat alkuperäisen aihe ja regex vastaamaan, niin sinun täytyy paeta tilat regex. Seuraava lauseke tuottaa ottelun alkuperäinen aihe: preg_match ("/man \\ Istunto \\ alas /X", $ aihe) pakeni yksi välilyönti on "\\". Älkäämme nyt puhua valkoinen tilaa merkkiluokan.

Huomaa, että välilyönnit on todella [\\ \\ t \\ r \\ n \\ f], ei vain "\\". Älkäämme kuitenkaan jatkaa kuvitus käyttäen "\\". Käytämme samaa aihetta, joka on: $ edellyttää = "Olen mies istuu alas."; Jos haluamme sovittaa tilaa edessä istunnon jälkeen "istuu", jossa x modifier, niin meidän regex voisi olla; /[] Istuu /X Huomaa, että tyhjätilamerkit vuonna merkkiluokan ei ole karannut. Eli kanssa x muokkaaja, välilyönnillä sisällä merkki luokka ei karannut, kun tyhjää ulkopuolella merkki luokka on karannut.

Seuraava lauseke tuottaa ottelu: preg_match ("/[] istuu /X", $ subject) Kun X muokkaaja, minkä tahansa tekstin välillä # luonne ja hiljaista tai nimenomaista rivinvaihtomerkki ohitetaan. Implisiittinen Rivinvaihtomerkkiä saavutetaan painamalla Enter-näppäintä, kun kirjoitat. Nimenomainen Rivinvaihtomerkkiä saavutetaan kirjoittamalla \\ n merkki. Harkitse seuraava koodi: $ aihe = "Olen mies istuu alas."; $ Re = "/man \\ #Comment menee täällä istuu /X"; jos (preg_match ($ uudelleen, $ aihe)) echo "Hyväksytty". "Muu echo" ei vastaa "."?> Aihe on: $ edellyttää = "Olen mies istuu alas.

"; Regex on: $ re = "/man \\ #Comment menee täällä istuu /X"; Huomautus läsnäolo # luonnetta ja implisiittinen Rivinvaihtomerkkiä, saatu sanan, "täällä" painamalla Enter-näppäintä. Ottelu tuotetaan. Osa merkkijono, joka on itse asiassa sovitettu on "mies istuu". Seuraavassa koodi, Rivinvaihtomerkkiä on selkeä, ja \\ n. Ottelu on myös tuottanut. $ Aihe = "Olen mies istuu alas."; $ Re = "/man \\ #Comment menee täällä \\ nsitting /X"; jos (preg_match ($ uudelleen, $ aihe)) echo "Hyväksytty". "Muu echo" ei vastaa ".

"?>

Page   <<       [1] [2] [3] [4] >>
Copyright © 2008 - 2016 lukeminen koulutus Artikkelit,https://koulutus.nmjjxx.com All rights reserved.