Jaa


Säännönmukaiset lausekkeet

IsMatch-, Match- ja MatchAll-funktioita käytetään tekstin kuvioiden poimimiseen ja vahvistamiseen. Heidän käyttämäänsä mallia kutsutaan säännölliseksi lausekkeeksi.

Säännölliset lausekkeet ovat tehokkaita ja monipuolisia. Ne voivat kuitenkin joskus esiintyä satunnaisena välimerkkisarjana. Tässä artikkelissa ei kuvata kaikkia säännöllisten lausekkeiden näkökohtia, mutta verkossa on saatavilla runsaasti tietoa, opetusohjelmia ja työkaluja.

Säännöllisillä lausekkeilla on pitkä historia ja ne ovat saatavilla monilla ohjelmointikielillä. Jokaisella ohjelmointikielellä on oma säännöllisten lausekkeiden murteensa, ja standardeja on vähän. Pyrimme mahdollisuuksien mukaan siihen, että sama säännöllinen lauseke antaa saman tuloksen kaikissa Power Fx toteutuksissa. Yhteensopivuutta ei ole helppo saavuttaa, koska Power Fx se toimii JavaScriptin ja .NET:n päällä, joilla on merkittäviä eroja. Säännölliset lausekkeet toimivat eri alustoilla Power Fx käyttämällä osajoukkoa ominaisuuksia, joita tuetaan laajalti koko alalla.

Tämän seurauksena jotkin muissa ympäristöissä toimivat säännölliset lausekkeet saattavat olla estettyinä tai niitä on muokattava Power Fx. Sisällönluontiaikavirheet raportoidaan, kun ilmenee ominaisuuksia, joita ei tueta. Tämän vuoksi säännöllisen lausekkeen ja vaihtoehtojen on oltava sisällönluontiaikavakioita, ei dynaamisia, kuten muuttujassa.

Muistiinpano

Power Apps käyttää säännöllisten lausekkeiden Power Fx aiempaa versiota, jossa on vähemmän rajoituksia mutta myös vähemmän ominaisuuksia. MatchOptions.DotAll ja MatchOptions.FreeSpacing eivät ole käytettävissä, ja Match.Email - ja Match.Hyphen-määritykset ovat erilaisia. Unicode-korvikepareja ei käsitellä yhtenä merkkinä. MatchOptions.NumberedSubMatches on oletusarvo. Tässä kuvattu säännöllisten lausekkeiden versio on pian saatavilla Power Apps "Power Fx V1.0-yhteensopivuus" -kytkimellä.

Tuetut ominaisuudet

Power Fx Tukee seuraavia säännöllisen lausekkeen ominaisuuksia ja huomautuksia siitä, miten Power Fx toiminta voi poiketa muista järjestelmistä.

Säännöllisen lausekkeen on oltava vakio, eikä sitä saa laskea tai tallentaa muuttujaan. Operaattoria & , merkkijonojen interpolointia $"{...}" sekä Concatenate funktioita ja funktioita Char, UniChar joissa on vakioargumentteja, tuetaan.

Kirjaimelliset merkit

Ominaisuus Description
Kirjaimelliset merkit Mikä tahansa Unicode-merkki voidaan lisätä suoraan, paitsi \, [, ], ^, $.|?*+(){,,,,, } MatchOptions.FreeSpacing ,, #, ja muita välilyöntejä käytettäessä \s merkit on poistettava, koska niillä on eri merkitys.
Escape-kirjaimelliset merkit \ (kenoviiva), jota seuraa jokin suorista literaalimerkeistä, kuten \? kysymysmerkin lisääminen. \# ja \ sitä voidaan käyttää myös silloin, kun MatchOptions.FreeSpacing on poistettu käytöstä johdonmukaisuuden vuoksi.
Heksadesimaali- ja Unicode-merkkikoodit \x20 täsmälleen kahdella heksadesimaalinumerolla, \u2028 täsmälleen neljällä heksadesimaalinumerolla ja sitä voidaan käyttää korkeille ja matalille korvikkeille.
Unicode-koodipiste \u{01F47B} enintään kahdeksalla heksadesimaalinumerolla. On oltava välillä 0 - U+10FFFF, eikä sitä voi käyttää korkeaan tai matalaan korvikkeeseen. Voi johtaa korvikepariin (kaksi merkkiä), jos se on suurempi kuin U+FFFF.
Vaunujen paluu \r, sama kuin Char(13).
Rivin merkki \n, sama kuin Char(10).
Lomakkeen syöttö \f, sama kuin Char(12).
Vaakasuuntainen välilehti \t, sama kuin Char(9).

Käytä \x tai sen \u sijaan. Merkkien oktaalikoodit, kuten \044 tai \o{044} eivät ole sallittuja, koska ne voivat olla moniselitteisiä numeroitujen takaviittausten kanssa.

\v ei tueta, koska se on moniselitteinen säännöllisten lausekkeiden kielissä. Käytä \x0b pystysuorassa välilehdessä tai [\x0b\f\r\n\x85\u2028\u2029] pystysuorassa välilyönnissä.

Väitteet

Väitteet vastaavat tiettyä kohtaa tekstissä, mutta eivät kuluta merkkejä.

Ominaisuus Description
Rivin alku ^, vastaa tekstin alkua tai rivin alkua, jos käytetään MatchOptions.Multiline-funktiota .
Rivin loppu $, vastaa tekstin loppua tai rivin loppua, jos käytetään MatchOptions.Multiline-funktiota .
Lookahead (?=a) ja (?!a) ottelut edessä kuviota varten.
Katsoa taakse (?<=b) ja (?<!b) ottelut takana kuvioksi.
Sananvälit \b ja \B käyttämällä kirjainten [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}] Unicode-määritelmää.

$ Vastaa rivin loppua, mukaan lukien kaikki perät, \r\n, \r tai \n.

Ennakointi- ja takana-väitteet eivät voi sisältää aliosumia tai rajattomasti kvantifioijia, eikä niitä voi käyttää ulkopuolisen kvantifioijan kanssa.

Hahmoluokkia

Ominaisuus Description
Piste ., vastaa kaikkea paitsi \r ja \n ellei MatchOptions.DotAll-tiedostoa käytetä.
Hahmo-luokka [abc] luettelo hahmoista, [a-fA-f0-9] hahmovalikoima, [^a-z] kaikki paitsi nämä hahmot. Merkkiluokkia ei voi sisäkkäin, vähentää tai leikata, ja monet välimerkit eivät välttämättä esiinny kahdesti peräkkäin (@@, %%, !!, jne.).
Word-merkit \w \W ja käyttämällä kirjainten [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}] Unicode-määritelmää. \W ei voi käyttää negatiivisessa merkkiluokassa.
Numeromerkit \d sisältää numerot ja,vastaa kaikkea paitsi merkkejä, 0 jotka vastaavat toisiaan9 . \p{Nd}\D\d \D ei voi käyttää negatiivisessa merkkiluokassa.
Välilyönnin merkit \s Sisältää välimerkkejä [ \t\n\x0b\f\r\x85\u2028\u2029\p{Z}], \S jotka vastaavat kaikkea paitsi \s merkkejä. \S ei voi käyttää negatiivisessa merkkiluokassa.
Unicode-merkkiluokka \p{Ll} vastaa kaikkia Unicode-pieniä kirjaimia, mutta \P{Ll} vastaa kaikkea, mikä ei ole Unicode-pientä kirjainta. \P{} ei voi käyttää negatiivisessa merkkiluokassa.

Selkeyden lisäämiseksi ja monitulkintaisuuden välttämiseksi hakasulkeiden merkkiluokat ovat rajoittavampia kuin muissa säännöllisten lausekkeiden kielissä:

  • Kirjaimelliset tavuviivamerkit on poistettava. Käytä [\-a] sen sijaan, että vastaisi [-a]- tai a.
  • Alkavat hakasulkeet on poistettava. Käytä [\[a] sen sijaan, että vastaisi [[][ tai a.
  • Ellei se ole ensimmäinen merkki ja osoittaa negaatiota, merkki on paettava. Käytä [a\^] sen sijaan, että vastaisi [a^]^ tai a.
  • Kiharat henkselit on poistettava. Käytä [\{\}] sovittaaksesi { tai }.
  • Tyhjää merkkiluokkaa [] ei tueta. Jos haluat sisällyttää merkkiluokkaan loppuhakasulkeen, poista se.

Unicode-merkkiluokkia, joita tukevat \p{} ja \P{}:

  • Kirjaimet: L, Lu,, Ll, Lt, LmLo
  • Arvosanat: M, Mn, Mc, Me
  • Numerot: N, Nd, Nl, No
  • Välimerkit: P, Pc,, Pd, Ps, Pe, Pi,, PfPo
  • Symbolit: S, Sm,, Sc, SkSo
  • Erottimet: Z, Zs, Zl, Zp
  • Ohjausobjekti ja Muoto: Cc, Cf, kun taas muita C etuliiteluokkia ei tueta.

\W, \D,, eikä \Ssitä voi käyttää negoidussa merkkiluokassa \P{}[^...]. Jotta nämä negatiiviset merkkiluokat voidaan ottaa käyttöön joillakin alustoilla, ne käännetään Unicode-vastineiksi, mikä voi olla vaikeaa, jos se myös kumotaan.

Unicode-merkkejä välillä U+10000 ja U+10FFFF, jotka edellyttävät korvikepareja, ei tueta merkkiluokissa.

Kvantifioijat

Ominaisuus Description
Ahne nolla tai yksi ? vastaa nollaa tai kertaa, mahdollisimman suurella osumalla.
Ahne nolla tai enemmän * vastaa nolla kertaa tai useammin, mahdollisimman suurella osumalla.
Ahne yksi tai useampi + Osuu yhteen tai useampaan kertaan, mahdollisimman suurella osumalla.
Ahne ainakin n {n,} osuu vähintään n kertaa, mahdollisimman suurella osumalla. Esimerkiksi,yhdistää a{3,} kaikki merkit. aaaaa
Ahne n:n ja m:n välillä {n,m} Ottelut N- ja M-kertojen välillä mahdollisimman suurella vastaavuudella. Esimerkiksi,vastaa a{1,3} kolmea ensimmäistä merkkiä aaaaa.
Laiska nolla tai yksi ?? vastaa nollaa tai kertaa, mahdollisimman pienellä osumalla.
Laiska nolla tai enemmän *? Vastaa nolla kertaa tai useammin, mahdollisimman pienellä osumalla.
Laiska yksi tai useampi +? Osuu yhteen tai useampaan kertaan, mahdollisimman pienellä osumalla.
Laiska ainakin n {n,}? osuu vähintään n kertaa, mahdollisimman pienellä osumalla. Esimerkiksi,vastaa a{3,}? vain kolmea ensimmäistä merkkiä aaaaa.
Laiska n:n ja m:n välillä {n,m}? Vastaa N- ja M-kertoja , mahdollisimman pienellä vastaavuudella. Esimerkiksi,vastaa a{1,3}? vain ensimmäistä merkkiä aaaaa.
Tarkka n {n} täsmälleen n kertaa . Esimerkiksi,vastaa a{3} täsmälleen kolmea merkkiä aaaaa.

Omistusmuotoilijoita ei tueta.

Aliosumien ja kvantifioijien sekoittamisessa on rajoituksia. Lisätietoja on kohdassa Mahdolliset tyhjät alivastaavuudet.

Ryhmät

Ominaisuus Description
Ryhmittele ( ja ) niitä käytetään käytettävien kvantifioijien elementtien ryhmittelyyn. Esimerkiksi,ottelut (abc)+abcabc.
Vuorottelu a|b Vastaa "A" tai "B", joita käytetään usein ryhmässä.
Nimetty alivastaavuus ja takaviite (?<name>chars) kaappaa alivastaavuuden, jossa on nimi name, johon viitataan \k<name>. Ei voi käyttää, jos MatchOptions.NumberedSubMatches on käytössä.
Numeroitu alivastaavuus ja takaviite Kun MatchOptions.NumberedSubMatches on käytössä, (a) sieppaa alivastaavuuden, johon \1 viitataan.
Ei-sieppaamaton ryhmä (?:a), luo ryhmän sieppaamatta tulosta nimettynä tai numeroituna alivastaavuutena. Kaikki ryhmät eivät ole sieppaavia, ellei MatchOptions.NumberedSubMatches ole käytössä.

Nimettyjä ja numeroituja aliosumia ei voi käyttää yhdessä. Oletusarvoisesti nimetyt alivastaavuudet ovat käytössä, ja niitä suositaan selkeyden ja ylläpidettävyyden vuoksi, kun taas tavallisista sieppausryhmistä tulee ei-sieppausryhmiä, joiden suorituskyky on parantunut. Tätä toimintaa voidaan muuttaa MatchOptions.NumberedSubMatches -toiminnolla , joka tarjoaa perinteisiä sieppausryhmiä, mutta poistaa nimetyt sieppausryhmät käytöstä. Jotkut toteutukset käsittelevät numeroitujen ja nimettyjen sieppausryhmien yhdistelmää eri tavalla, minkä vuoksi Power Fx se ei salli.

Itseensä viittaavia sieppausryhmiä, esimerkiksi säännöllistä lauseketta (a\1), ei tueta.

Kahdella sieppausryhmällä ei voi olla samaa nimeä, esimerkiksi säännöllistä lauseketta (?<id>\w+)|(?<id>\d+) ei tueta.

Nimetyn aliosuman nimen on alettava \p{L} merkillä tai _, ja se voi jatkua kyseisillä merkeillä plus \p{Nd}. Nimien pituus on rajoitettu 62 UTF-16 koodiyksikköön.

Takaviittauksia mahdollisesti tyhjiin aliosumiin ja aliosumiin taaksepäin tai eteenpäin katsomiseen ei myöskään tueta.

Jotkut toteutukset tarjoavat "eksplisiittisen sieppauksen" suorituskyvyn parantamiseksi, mikä on tarpeetonta Power Fx , koska se on oletusarvo. MatchOptions.NumberedSubMatches poistaa sen käytöstä ja ottaa käyttöön implisiittisesti numeroidut sieppaukset.

Aliosumien ja kvantifioijien sekoittamisessa on rajoituksia. Katso lisätietoja kohdasta Mahdollisesti tyhjät alivastaamat.

Kommentit

Ominaisuus Description
Sisäiset kommentit (?# comment here), joka jätetään huomiotta kommenttina. Kommentti päättyy seuraavaan sulkeeseen, vaikka kommentissa olisi alkusulku.

Katso MatchOptions.FreeSpacing vaihtoehtoa säännöllisten lausekkeiden muotoiluun ja kommentointiin.

Sisäiset asetukset

Ominaisuus Description
Sisäiset asetukset (?im) on sama kuin MatchOptions.IgnoreCase- ja MatchOptions.Multiline-tiedostojen käyttäminen. On asetettava säännöllisen lausekkeen alkuun.

Tuetut inline-tilat ovat [imsx]. Nämä vastaavat MatchOptions.IgnoreCase, MatchOptions.Multiline , MatchOptions.DotAll jaMatchOptions.FreeSpacing . n hyväksytään myös yhteensopivuuden vuoksi, mutta sillä ei ole vaikutusta, koska se on oletusarvo eikä ole yhteensopiva MatchOptions.NumberedSubMatches-tiedoston kanssa.

Tekstiin sidotuilla asetuksilla ei voi poistaa asetusta käytöstä tai määrittää asetusta alilausekkeelle.

Asetukset

Vastaavuusasetukset muuttavat säännöllisten lausekkeiden vastaavuuden toimintaa. Vaihtoehtoja voi ottaa käyttöön kahdella tavalla, joita voidaan sekoittaa, kunhan ristiriitoja ei ole:

  • MatchOptions-luettelointiarvo välitettiin kolmantena argumenttina Match -, MatchAll - jaIsMatch-funktioille . Lisävarusteet voidaan yhdistää esimerkiksi & operaattoriin tai Concatenate toimintoon MatchOptions.DotAll & MatchOptions.FreeSpacing. Kaikki säännöllisen lausekkeen funktiot edellyttävät, että MatchOptions on vakioarvo, sitä ei voi laskea tai tallentaa muuttujaan.
  • (?...) etuliite aivan säännöllisen lausekkeen alussa. Vaihtoehtoja voidaan yhdistää esimerkiksi (?...) useisiin kirjaimiin (?sx)rakenteessa. Joillakin asetuksilla ei ole vastinetta (?...) , mutta niillä voi olla muita tapoja saada sama vaikutus, esimerkiksi MatchOptions.BeginsWith vastaa ^ säännöllisen lausekkeen alussa.

Sisältö

Käytössä MatchOptions.Contains ilman säännöllisen lausekkeen tekstivastinetta. MatchOptions.Contains on oletusarvo kaikille funktioille, jotka Power Appseivät sisällä Power Apps MatchOptions.Complete-funktiota.

Suorita loppuun

Käytössä MatchOptions.Complete - tai käytä ^ ja säännöllisen $ lausekkeen alussa ja vastaavasti.

BeginsWith

Käytössä MatchOptions.BeginsWith tai käytä ^ säännöllisen lausekkeen alussa.

EndsWith

Käytössä MatchOptions.EndsWith tai käytä $ säännöllisen lausekkeen lopussa.

Pisteet

Käytössä MatchOptions.DotAll-tiedostossa tai (?s) säännöllisen lausekkeen alussa.

Normaalisti pisteoperaattori . vastaa kaikkia merkkejä rivinvaihtomerkkejä [\n\x0b\f\r\x85\u2028\u2029] lukuun ottamatta. DotAll-muuntimella kaikki merkit täsmäävät, mukaan lukien rivinvaihdot.

Tässä esimerkissä vain "Hei" täsmää, koska oletusarvoisesti . se ei vastaa rivinvaihtoa:

Trim( Match( "Hello
              World", ".*" ).FullMatch )
// returns 
// "Hello"

Mutta jos lisäämme DotAll-määreen , rivinvaihto ja kaikki seuraavat merkit täsmäävät:

Trim( Match( "Hello
              World", ".*", MatchOptions.DotAll ).FullMatch )
// returns 
// "Hello
// World"

FreeSpacing

Käytössä MatchOptions.FreeSpacingin kanssa tai (?x) säännöllisen lausekkeen alussa.

Vapaat välit helpottavat monimutkaisen säännöllisen lausekkeen lukemista ja ylläpitoa. Säännöt ovat yksinkertaiset:

  • Välilyönnit ohitetaan säännöllisessä lausekkeessa, mukaan lukien kaikki merkit, jotka vastaavat toisiaan \s. Jos haluat sovittaa välilyönnin, käytä, \s\ , \t, \r, tai \n.
  • # alkaa kommentti, joka jatkuu rivin loppuun. Se ja kaikki merkit, jotka seuraavat seuraavaa rivinvaihtomerkkiä (merkit, joita ei ole vastattu . ilman MatchOptions.DotAll-merkkiä) ohitetaan.
  • Hahmoluokat eivät sisälly näihin muutoksiin. Avaruushahmot ja # käyttäytyvät normaalisti. Esimerkiksi,palauttaa IsMatch( "a#b c", "(?x)a[ #]b[ #]c" ) arvon tosi. Jotkin säännöllisten lausekkeiden kielet sisältävät merkkiluokkia vapailla välilyönteillä tai tarjoavat mahdollisuuden sisällyttää ne, mutta Power Fx eivät.

Esimerkiksi tässä on monimutkainen säännöllinen lauseke ISO 8601 -päivämäärän ja kellonajan täsmäyttämiseksi:

IsMatch( 
    "2025-01-17T19:38:49+0000",
    "^\d{4}-(0\d|1[012])-([012]\d|3[01])(T([01]\d|2[0123]):[0-5]\d(:[0-5]\d(\.\d{3})?)?(Z|[\-+]\d{4}))?$"
)
// returns true

Ja tässä on identtinen säännöllinen lauseke, jossa on vapaat välilyönnit, joissa käytetään useita rivejä, ryhmien sisennyksiä ja säännöllisten lausekkeiden kommentteja, mikä tekee tästä versiosta helpomman ymmärtää, vahvistaa ja ylläpitää.

IsMatch( "2025-01-17T19:38:49+0000", 
    "(?x)                 # enables free spacing, must be very first
    ^                     # matches from beginning of text
    \d{4}                 # year (0000-9999)
    -(0\d|1[012])         # month (00-12)
    -([012]\d|3[01])      # day (00-31, range not checked against month)
    (T([01]\d|2[0123])    # optional time, starting with hours (00-23)
      :[0-5]\d            # minutes (00-59)
      (:[0-5]\d           # optional seconds (00-59)
        (\.\d{3})?        # optional milliseconds (000-999)
      )?
      (Z|[\-+]\d{4})      # time zone
    )?
    $                     # matches to end of text
    "
)
// returns true

IgnoreCase

Käytössä MatchOptions.IgnoreCase -tiedoston kanssa tai (?i) säännöllisen lausekkeen alussa.

Vastaa kirjaimen tekstiä, jossa kirjainkoolla ei ole merkitystä: isot kirjaimet vastaavat pieniä kirjaimia ja pienet kirjaimet isojen kirjainten kanssa.

Esimerkki:

IsMatch( "HELLO!", "hello", MatchOptions.IgnoreCase )
// returns true

IsMatch( "file://c:/temp/info.txt", "^FILE://", MatchOptions.IgnoreCase )
// returns true

Suurin osa tai Power Fx ovat kulttuuritietoisia, mutta eivät täällä. Maa-alueen invarianttien vastaavuuden käyttäminen on alan standardi säännöllisille lausekkeille, mukaan lukien JavaScriptissä ja Perlissä. Se on hyödyllinen toisessa esimerkissä, jossa järjestelmäresurssia täsmäytetään, esimerkiksi tr-TR kulttuurissa, jossa I ei ole isoja kirjaimia i.

Jos tarvitaan kulttuuritietoinen, kirjainkoolla merkitsemätön vastaavuus, käytä sen sijaan characters-luokkaa vastaavien merkkien kanssa, esimerkiksi [Hh][Ee][Ll][Ll][Oo] ensimmäisessä esimerkissä.

Useita rivejä

Käytössä MatchOptions.Multiline-komennolla tai (?m) säännöllisen lausekkeen alussa.

Normaalisti ^ ja ankkurit $ vastaavat syötetyn tekstin alkua ja tekstiä. Monirivin määreellä nämä ankkurit vastaavat syötetyn tekstin rivien alkua ja loppua, jossa kukin rivi päättyy merkkiin \r, \n, \r\n, tai syötteen loppuun. Esimerkki:

MatchAll( "Hello" & Char(13) & Char(10) & "World", "^.+$" )
// returns 
// "Hello"

Esimääritetyt mallit

Ennalta määritettyjen kuvioiden avulla voit yhdistää joko yhden merkkijoukon tai useiden merkkien sarjan. Käytä merkkijonon ketjutusoperaattoria & yhdistääksesi tekstimerkkijonot Match-luettelon jäseniin :

Match-luettelointi Description Säännöllinen lauseke
Mikä tahansa Vastaa mitä tahansa merkkiä. .
Pilkku Vastaa pilkkua ,. ,
Sormi Vastaa yhtä numeroa (0 kautta 9 ja muut jäsenet \p{Nd}). \d
Sähköpostiosoite Vastaa sähköpostiosoitetta, joka sisältää "at"-symbolin (@), ja toimialuenimeä, joka sisältää vähintään yhden pisteen (.), joka on erotettu välilyönneillä ja välimerkeillä. Katso huomautus
Tavuviiva Vastaa yhdysmerkkiä. - Katso huomautus
VasenParen Vastaa vasenta sulkua (. \(
Kirje Vastaa kirjainta. \p{L}
Useita numeroita Vastaa yhtä tai useampaa numeroa. \d+
Useita kirjaimia Vastaa yhtä tai useampaa kirjainta. \p{L}+
MultipleNonSpaces Vastaa yhtä tai useampaa merkkiä, joka ei ole välilyöntimerkki (ei välilyönti, sarkain tai uusi rivi). \S+
Useita tiloja Vastaa yhtä tai useampaa välilyöntimerkkiä (välilyönti, sarkain tai uusi rivi). \s+
Ei-avaruus Vastaa yhtä merkkiä, joka ei ole välilyöntimerkki. \S
Valinnaiset numerot Vastaa nollaa, yhtä tai useampaa merkkiä. \d*
Valinnaiset kirjaimet Vastaa nollaa, yhtä tai useampaa kirjainta. \p{L}*
Valinnaiset NonSpaces Vastaa nollaa, yhtä tai useampaa merkkiä, jotka eivät ole välilyöntimerkkejä. \S*
Valinnaiset tilat Vastaa nollaa, yhtä tai useampaa välilyöntimerkkiä. \s*
Period Vastaa pistettä tai pistettä .."). \.
Oikea Paren Vastaa oikeaa sulkua ). \)
Avaruus Vastaa välilyöntimerkkiä. \s
Tab Vastaa sarkainmerkkiä. \t

Esimerkiksi kuvio "A" ja Match.MultipleDigits vastaa kirjainta "A", jota seuraa yksi tai useampi numero.

Match.Email kuvio on monimutkaisempi kuin muut. Se tunnistaa ja poimii lomakkeen local@hostname.tld yleiset sähköpostiosoitteet, mahdollisesti pitkistä tekstinpätkistä, ja tukee kansainvälisiä merkkejä ja hymiöitä. Sen avulla voit vahvistaa lomakkeen, joka ottaa sähköpostiosoitteen syötteeksi, pikatestinä siitä, että syöte on sähköpostilomakkeessa. Jos et poimi, tunnista sähköpostiosoite esimerkiksi tekstinsyötteen ohjausobjektissa MatchOptions.Complete-komennon avulla .

Match.Email ei kuitenkaan vahvista, että sähköpostiosoite on kaikkien sähköpostiosoitteita, verkkotunnuksia ja ylätason verkkotunnuksia koskevien monien kehittyvien standardien mukainen, mikä edellyttäisi monimutkaista säännöllistä lauseketta, jota olisi päivitettävä aika ajoin. Vaikka useimpia sähköpostiosoitteita käsitellään odotetulla tavalla, Match.Email vastaa joitakin virheellisiä tapauksia, kuten isäntänimen alaviivaa, eikä vastaa joitakin kelvollisia tapauksia, kuten lainattuja sähköpostiosoitteita tai IP-osoitteita. Tarvittaessa verkossa on monia säännöllisiä lausekkeita todella laillisen sähköpostiosoitteen havaitsemiseksi. Testaa säännöllinen lauseke aina tarpeidesi mukaan ennen kuin käytät sitä tuotannossa.

Jos haluat nähdä käytetyn säännöllisen lausekkeen, arvioi kaava Text( Match.Email ). Ensimmäinen osa vastaa merkkejä ennen merkkiä @ ja sulkee pois yleiset välimerkit RFC 822:n ja tarkistusten mukaisesti sekä Unicoden aloitus- ja lopetusvälimerkit helpompaa poimimista varten, kuten (, [, , « ja . Se ei tue lainattujen merkkijonojen tai kommenttien harvinaista ja lannistelevaa käyttöä. Säännöllisen @ lausekkeen toinen ja kolmas osa ovat samat ja erotettu a:lla ., mikä varmistaa, että osoitteessa on aina vähintään yksi . . Nämä osat eivät sisällä kaikkia Unicode-välimerkkejä lukuun ottamatta ., -, ja _. IP-osoitteita ei tueta. Koko sähköpostiosoitteessa tuetaan kansainvälisiä merkkejä ja hymiöitä.

In, kun 1.0:aa ei käytetä Power Apps Power Fx , Match.Email ja Match.Hyphen määritelmät ovat hieman erilaiset. Match.Email on yksinkertaisempi, mutta ei sovellu sähköpostiosoitteen purkamiseen, koska se vie tilaa. Aiemmin Match.Hyphen karkattiin merkkiluokan ulkopuolelle, mikä on nyt laitonta.

Numeroidut SubMatchit

Käytössä MatchOptions.NumberedSubMatches ilman sisäistä vaihtoehtoa. (?n) tuetaan tämän vaihtoehdon vastakohtana yhteensopivuuden vuoksi, ja se on oletusarvo.

Oletusarvoisesti (...) ei kaappaa, mikä vastaa sitä, mitä useimmat järjestelmät kutsuvat "eksplisiittiseksi sieppaukseksi". Jos haluat kaapata, käytä nimettyä sieppausta, jossa (?<name>...) on backreference. \k<name> Nimettyjen sieppausten käyttäminen parantaa suorituskykyä, koska se ei sieppaa tarpeettomia ryhmiä, parantaa selkeyttä nimien avulla eikä ole altis virheille, jos sieppausten sijainti muuttuu.

Jos sinulla on olemassa oleva säännöllinen lauseke, se voi riippua siitä, että ryhmät siepataan ja numeroidaan automaattisesti, mukaan lukien numeroidut viittaukset. Tämä toiminta on käytettävissä MatchOptions.NumberedSubMatches -vaihtoehdon avulla.

Nimettyjä ja numeroituja aliosumia ei voi käyttää yhdessä. Koska jotkin toteutukset käsittelevät numeroitujen ja nimettyjen sieppausryhmien yhdistelmää eri tavalla, Power Fx se ei salli.

Mahdollisesti tyhjät aliosumat

Kuten johdannossa todettiin, Power Fx säännölliset lausekkeet on tarkoituksella rajoitettu ominaisuuksiin, jotka voidaan toteuttaa johdonmukaisesti .NET:ssä, JavaScriptissä ja muissa ohjelmointikielten säännöllisissä lausekemoottoreissa. Sisällönluontiaikaiset virheet estävät sellaisten ominaisuuksien käytön, jotka eivät kuulu tähän joukkoon.

Yksi osa-alue, joka voi olla erilainen toteutusten välillä, on se, miten tyhjiä aliosumia käsitellään. Tarkastellaan esimerkiksi säännöllistä lauseketta (?<submatch>a*)+ , jota pyydetään vastaamaan tekstiä a. .NET:ssä aliosuma johtaa tyhjään tekstimerkkijonoon, kun taas JavaScriptissä se johtaa a. Molempia voidaan pitää oikeina toteutuksina, koska + kvantifioija voi tyytyä tyhjään merkkijonoon, koska ryhmän sisällöllä on * kvantifioija.

Jotta vältyttäisiin erilaisilta tuloksilta eri toteutusten välillä Power Fx , tyhjiä alivastaavuuksia ei voi käyttää kvantifioijan kanssa. Tässä on esimerkkejä siitä, miten aliosuma voi olla tyhjä:

Esimerkkejä Description
(?<submatch>a{0,}b*)+ Kaikki aliosuman sisältö on valinnaista, joten koko alivastaavuus voi olla tyhjä.
((<submatch>a)?b)+ ? Alivastaavuuden ulkopuolisen vuoksi alivastaavuus kokonaisuudessaan on valinnainen.
(?<submatch>a|b*)+ Vuorottelu osaottelun sisällä jollakin, joka voi olla tyhjä, voi johtaa siihen, että koko osaottelu on tyhjä.
((?<submatch>a)|b)+ Vuorottelu osaottelun ulkopuolella voi täsmätä, b jolloin osaottelu olisi tyhjä.

Alivastaavuus (?<submatch>a+)+ ei voi olla tyhjä, koska alivastaavuudessa on oltava vähintään yksi a ja sitä tuetaan.

Unicode

Power Fx säännölliset lausekkeet käyttävät Unicode-luokkia määrittämään \w, \d, ja \s tietyt luokat ovat käytettävissä \p{..}.

Nämä määritelmät voivat vaihdella eri alustoilla. Esimerkiksi Unicode-standardia päivitetään aika ajoin uusilla merkeillä, jotka ympäristöt ottavat myöhemmin käyttöön omaan tahtiinsa. Odotettavissa on vaihtelua tuloksissa eri alustojen välillä, kunnes kaikki alustat on päivitetty.

Power Fx säännölliset lausekkeet varmistavat, että luokkatiedot ovat aina saatavilla monikieliselle perustasolle (merkit U+0 - U+ffff). Jotkin alustat eivät toteuta luokkia merkeille täydentävässä monikielisessä tasossa ja sen ulkopuolella (U+10000 - U+10ffff). Tämä rajoitus ei yleensä ole huolestuttava, koska monikielisen perustason merkit ovat yleisimmin käytettyjä. Käytä merkkiarvoja suoraan luokkien sijaan, jos skenaariosi sisältää hahmoja U+10000 tai enemmän. Testaa säännöllisiä lausekkeita alustoilla, joita aiot käyttää.

Alustojen välillä voi olla pieniä reunatapauseroja. Jotkin ympäristöt eivät esimerkiksi välttämättä näy ſ vastaavina s , kun MatchOptions.IgnoreCase käynnistetään. Jos nämä merkit ovat tärkeitä skenaariossasi, käytä merkkiluokkaa, joka [ſsS] vastaa kirjainkokoa huomaamattomasti ja sisällytä halutut merkit eksplisiittisesti.