Jagamisviis:


Regulaaravaldised

Funktsioone IsMatch, Match ja MatchAll kasutatakse tekstimustrite eraldamiseks ja valideerimiseks. Nende kasutatavat mustrit nimetatakse regulaaravaldiseks .

Regulaaravaldised on võimsad ja mitmekülgsed. Siiski võivad need mõnikord ilmuda kirjavahemärkide juhusliku jadana. See artikkel ei kirjelda kõiki regulaaravaldiste aspekte, kuid veebis on saadaval palju teavet, õpetusi ja tööriistu.

Regulaaravaldistel on pikk ajalugu ja need on saadaval paljudes programmeerimiskeeltes. Igal programmeerimiskeelel on oma regulaaravaldiste dialekt ja standardeid on vähe. Püüame nii palju kui võimalik, et sama regulaaravaldis annaks kõigis implementatsioonides sama tulemuse. Power Fx Ühilduvuse saavutamine pole lihtne, kuna see töötab JavaScripti ja .NET-i peal, millel on olulisi erinevusi. Power Fx Erinevatel platvormidel töötamiseks kasutavad regulaaravaldised laialdaselt toetatud funktsioonide alamhulka kogu tööstuses. Power Fx

Seetõttu võivad mõned teistes keskkondades töötavad regulaaravaldised olla blokeeritud või vajada kohandamist jaotises Power Fx. Toetamata funktsioonide ilmnemisel teatatakse loomise ajal esinevatest vigadest. Seepärast peavad regulaaravaldis ja valikud olema autoriseerimisaja konstantsed, mitte dünaamilised, näiteks muutujas esitatud.

Märkus.

Power Apps kasutab regulaaravaldiste varasemat versiooni, millel on vähem piiranguid, aga ka vähem funktsioone. Power Fx MatchOptions.DotAll ja MatchOptions.FreeSpacing pole saadaval ning Match.Email ja Match.Hyphen definitsioonid on erinevad. Unicode’i asenduspaare ei käsitleta ühe märgina. Vaikimisi on valitud MatchOptions.NumberedSubMatches. Siin kirjeldatud regulaaravaldiste versioon on saadaval peagi valiku " Power Apps V1.0 ühilduvus" all.Power Fx

Toetatud funktsioonid

Power Fx toetab järgmisi regulaaravaldiste funktsioone koos märkustega selle kohta, kuidas Power Fx käitumine võib teistest süsteemidest erineda.

Regulaaravaldis peab olema konstantne ja seda ei tohi arvutada ega muutujasse salvestada. Toetatud on operaator & , stringi interpolatsioon $"{...}" ning konstantsete argumentidega funktsioonid Concatenate, Char ja UniChar .

Sõnasõnalised märgid

Funktsioon Kirjeldus
Sõnasõnalised märgid Suvalist Unicode’i märki saab otse sisestada, välja arvatud \, [, ], ^, $, ., |, ?, *, +, (, ), { ja }. Tühikute MatchOptions.FreeSpacing, #, ja muude \s kasutamisel tuleb tühikute asemel kasutada paomärke, kuna neil on erinev tähendus.
Päästetud sõnasõnalised märgid \ (tagurpidi kaldkriips), millele järgneb üks otsestest literaalmärkidest, näiteks \? küsimärgi lisamiseks. \# ja \ võib kasutada ka siis, kui MatchOptions.FreeSpacing on järjepidevuse huvides keelatud.
Kuueteistkümnendsüsteemis ja Unicode’i märgikoodid \x20 täpselt kahe kuueteistkümnendsüsteemis numbriga, \u2028 täpselt nelja kuueteistkümnendsüsteemis numbriga ja seda saab kasutada nii kõrge kui ka madala asendusarvuna.
Unicode’i koodipunkt \u{01F47B} kuni kaheksa kuueteistkümnendsüsteemi numbriga. Peab olema vahemikus 0 kuni U+10FFFF ja seda ei saa kasutada kõrge ega madala asendusväärtusena. Võib tulemuseks olla asenduspaar (kaks märki), kui see on suurem kui U+FFFF.
Kelgu tagasi \r, sama, kui Char(13).
Uue rea märk \n, sama, kui Char(10).
Vormi sööt \f, sama, kui Char(12).
Horisontaalne vahekaart \t, sama, kui Char(9).

Kasutage \x või selle \u asemel. Märkide oktaalsed koodid (nt \044 või ) \o{044} on keelatud, kuna need võivad nummerdatud tagasiviidetega olla mitmetähenduslikud.

\v ei toetata, kuna see on regulaaravaldiste keeltes mitmetähenduslik. Kasutage \x0b vertikaalse vahekaardi või [\x0b\f\r\n\x85\u2028\u2029] vertikaalse tühiku jaoks.

Väited

Väited vastavad teksti kindlale positsioonile, kuid ei kasuta ühtegi märki.

Funktsioon Kirjeldus
Rea algus ^, vastab teksti algusele või rea algusele, kui kasutatakse funktsiooni MatchOptions.Multiline .
Rea lõpp $, vastab teksti lõpule või rea lõpule, kui kasutatakse funktsiooni MatchOptions.Multiline .
Pilk tulevikku (?=a) ja (?!a) mustri jaoks matšid ette.
Vaata taha (?<=b) ja (?<!b) vasted mustri taga.
Sõnapausid \b ja \B kasutades tähtede [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}] Unicode’i definitsiooni.

$ vastab rea lõpule, sealhulgas lõpule \r\n, \r või \n.

Ettevaate ja tagakülje väited ei tohi sisaldada alamvasteid ega piiramatuid kvantoreid ning neid ei saa kasutada koos kvantoriga väljaspool.

Tegelaste klassid

Funktsioon Kirjeldus
Dot ., vastab kõigele, välja arvatud \r ja \n välja arvatud juhul, kui kasutatakse MatchOptions.DotAll .
Tegelaste klass [abc] Tegelaste loend, [a-fA-f0-9] tegelaste valik, [^a-z] kõik peale nende tegelaste. Märgiklasse ei saa pesastada, lahutada ega lõikuda ning paljud kirjavahemärgid ei pruugi ilmuda kaks korda järjest (@@, %%,, !! jne).
Wordi tähemärgid \w ja \W tähtede [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}] Unicode’i definitsiooni kasutamine. \W ei saa kasutada negatiivsete märkide klassis.
Numbrimärgid \d Sisaldab numbreid ja,vastab 09 kõigele, \p{Nd} välja arvatud märgid, mis sobitatakse \D . \d \D ei saa kasutada negatiivsete märkide klassis.
Tühiku tegelased \s Sisaldab tühikutega märke [ \t\n\x0b\f\r\x85\u2028\u2029\p{Z}], mis vastavad kõigele, \S välja arvatud tähemärgid \s. \S ei saa kasutada negatiivsete märkide klassis.
Unicode’i märgikategooria \p{Ll} vastab kõigile Unicode’i väiketähtedele, samas kui \P{Ll} see vastab kõigele, mis ei ole Unicode’i väiketäht. \P{} ei saa kasutada negatiivsete märkide klassis.

Selguse suurendamiseks ja mitmetähenduslikkuse vältimiseks on nurksulgude märgiklassid piiravamad kui teistes regulaaravaldiste keeltes.

  • Sõnasõnalised sidekriipsuga märgid tuleb paomärgist välja jätta. Kasutage [\-a] selle asemel, [-a] et sobitada - või a.
  • Algavatest nurksulgudest tuleb välja jääda. Kasutage [\[a] selle asemel, [[] et sobitada [ või a.
  • Kui see pole esimene märk ja näitab eitust, tuleb märk põgeneda. Kasutage [a\^] selle asemel, [a^] et sobitada ^ või a.
  • Lokkis breketid tuleb välja päästa. Kasutage [\{\}] sobitamiseks { või }.
  • Tühja märgiklassi [] ei toetata. Märgiklassi lõpusulgude lisamiseks paotee see.

Unicode’i märgikategooriad, mida toetavad \p{} ja \P{}:

  • Tähed: L, Lu, Ll, Lt, Lm, Lo
  • Märgid: M, Mn, Mc, Me
  • Numbrid: N, Nd, Nl, No
  • Kirjavahemärgid: P, Pc, Pd, Ps, Pe, Pi, Pf, Po
  • Sümbolid: S, Sm, Sc, Sk, So
  • Eraldajad: Z, Zs, Zl, Zp
  • Juhtimine ja vorming: Cc, Cf, samas kui teisi C eesliidete kategooriaid ei toetata.

\W, \D, \S ja \P{} ei saa kasutada eitatud märgiklassis [^...]. Mõnedel platvormidel rakendamiseks tõlgitakse need negatiivsed märgiklassid Unicode’i ekvivalentideks, mis võib olla keeruline teha, kui need ka eitatakse.

Märgiklassides ei toetata Unicode’i märke vahemikus U+10000 kuni U+10FFFF, mis nõuavad asenduspaare.

Kvantifikaatorid

Funktsioon Kirjeldus
Ahne null või üks ? vasteid null või üks kord, võimalikult suure vastega.
Ahne null või rohkem * vasteid null või rohkem korda, võimalikult suure vastega.
Ahne üks või mitu + vastet üks või mitu korda, võimalikult suure vastega.
Ahne vähemalt n {n,} vastet vähemalt n korda, võimalikult suure vastega. Näiteks a{3,} leiab vaste kõigile tähemärkidele tekstis aaaaa.
Ahne n ja m vahel {n,m} vasteid vahemikus n kuni m korda, võimalikult suure skooriga . Näiteks a{1,3} vastab aaaaa esimesele kolmele tähemärgile.
Laisk null või üks ?? vasteid null või üks kord, võimalikult väikese vastega.
Laisk null või rohkem *? vasteid null või rohkem korda, võimalikult väikese vastega.
Laisk üks või mitu +? vasteid üks või mitu korda, võimalikult väikese vastega.
Laisk vähemalt n {n,}? vasteid vähemalt n korda, võimalikult väikse vastega. Näiteks a{3,}? leiab vaste ainult esimesele kolmele tähemärgile tekstis aaaaa.
Laisk n ja m vahel {n,m}? vasteid n ja m korda, võimalikult väikese vastega. Näiteks a{1,3}? leiab vaste ainult aaaaa esimesele tähemärgile.
Täpne n {n} vastab täpselt n korda. Näiteks a{3} vastab täpselt kolmele tähemärgile tekstis aaaaa.

Omastavaid kvantoreid ei toetata.

Alamvastete ja kvantifikaatorite segamisel on piirangud. Lisateabe saamiseks vaadake jaotist Võimalikud tühjad alamvasted.

Rühmad

Funktsioon Kirjeldus
Grupp ( ja ) kasutatakse elementide rühmitamiseks kvantorite rakendamiseks. Näiteks, (abc)+ vaste abcabc.
Vaheldumine a|b sobib tähega "a" või "b", mida sageli kasutatakse rühmas.
Nimega alamvaste ja tagasiviide (?<name>chars) tabab nimega name alamvaste, millele on viidatud \k<name> abil. Ei saa kasutada, kui `MatchOptions.NumberedSubMatches` on lubatud.
Nummerdatud alamvaste ja tagasiviide Kui `MatchOptions.NumberedSubMatches` on lubatud, `tabab ` alamvaste, millele on viidatud ` `. (a)\1
Mittepüüdmise rühm (?:a), loob rühma ilma tulemust nimega või nummerdatud alamvastena jäädvustamata. Ükski grupp ei jäädvusta andmeid, kui funktsioon MatchOptions.NumberedSubMatches pole lubatud.

Nimega ja nummerdatud alamvasteid ei saa koos kasutada. Vaikimisi on nimetatud alamvaste lubatud ning neid eelistatakse selguse ja hooldatavuse huvides, samas kui standardsetest jäädvustusgruppidest saavad parema jõudlusega mittejäädvustusgrupid. Seda käitumist saab muuta funktsiooniga MatchOptions.NumberedSubMatches , mis pakub traditsioonilisi jäädvustusgruppe, kuid keelab nimega jäädvustusgrupid. Mõned rakendused käsitlevad nummerdatud ja nimetatud püüdmisgruppide kombinatsiooni erinevalt, mistõttu see Power Fx keelatakse.

Endale viitavaid püüdmisrühmi, näiteks regulaaravaldist (a\1), ei toetata.

Kahel püüdmisrühmal ei saa olla sama nime, näiteks regulaaravaldis (?<id>\w+)|(?<id>\d+) ei ole toetatud.

Nimega alamvaste nimi peab algama tähemärgiga \p{L} või _ ning võib jätkuda nende märkide ja \p{Nd}-ga. Nimede pikkus on piiratud 62 UTF-16 koodiühikuga.

Samuti ei toetata tagasiviiteid võimalikele tühjadele alamvastetele ja alamvastetele taga- või ettevaatevaates.

Mõned implementatsioonid pakuvad jõudluse parandamiseks valikut "selgesõnaline jäädvustamine", mis pole ``vajalik``, kuna see on vaikesäte. Power Fx MatchOptions.NumberedSubMatches keelab selle ja lubab kaudselt nummerdatud püüdmised.

Alamvastete ja kvantifikaatorite segamisel on piirangud. Lisateabe saamiseks vaadake Võimalikud tühjad alamvasted .

Kommentaarid

Funktsioon Kirjeldus
Tekstisisesed kommentaarid (?# comment here), mida kommentaarina ignoreeritakse. Kommentaar lõpeb järgmise sulgeva sulguga, isegi kui kommentaaris on avasulg.

Regulaaravaldiste vormindamise ja kommenteerimise alternatiivi leiate jaotisest MatchOptions.FreeSpacing .

Tekstisisesed valikud

Funktsioon Kirjeldus
Tekstisisesed valikud (?im) on sama mis `MatchOptions.IgnoreCase` ja `MatchOptions.Multiline` kasutamine. Peab olema määratud regulaaravaldise algusesse.

Toetatud tekstisisesed režiimid on [imsx]. Need vastavad vastavalt MatchOptions.IgnoreCase-le, MatchOptions.Multiline-le, MatchOptions.DotAll-le ja MatchOptions.FreeSpacing-le. n on samuti ühilduvuse tagamiseks aktsepteeritud, kuid sellel pole mingit mõju, kuna see on vaikeväärtus ja ei ühildu funktsiooniga MatchOptions.NumberedSubMatches.

Tekstisisesi valikuid ei saa kasutada alamväljenduse valiku keelamiseks ega määramiseks.

Suvandid

Vaste valikud muudavad regulaaravaldiste vastendamise käitumist. Valikute lubamiseks on kaks võimalust, mida saab kombineerida seni, kuni konflikti pole:

  • MatchOptions loendi väärtus, mis antakse kolmanda argumendina funktsioonidele Match, MatchAll ja IsMatch. Valikke saab kombineerida operaatoriga & või funktsiooniga Concatenate , näiteks MatchOptions.DotAll & MatchOptions.FreeSpacing. Kõik regulaaravaldiste funktsioonid nõuavad, et `MatchOptions` oleks konstantne väärtus, seda ei saa arvutada ega muutujana salvestada.
  • (?...) eesliide regulaaravaldise alguses. Konstruktsioonis `` (?...) `` saab valikuid kombineerida mitme tähega, näiteks `` (?sx)``. Mõnel valikul pole ``ekvivalenti``, aga sama efekti saavutamiseks võib olla teisi viise, näiteks ``MatchOptions.BeginsWith` ... (?...)^

Sisaldab

Lubatud valikuga MatchOptions.Sisaldab ilma regulaaravaldise tekstiekvivalendita. MatchOptions.Contains on vaikeväärtus kõikidele funktsioonidele väljaspool Power Apps; seespool Power Apps MatchOptions.Complete on vaikeväärtus IsMatch jaoks.

Lõpetatud

Lubatud valikuga MatchOptions.Complete või kasutades regulaaravaldise alguses vastavalt ^ ja $ .

BeginsWith

Lubatud valikuga MatchOptions.BeginsWith või kasutades regulaaravaldise alguses ja . ^

EndsWith

Lubatud valikuga MatchOptions.EndsWith või regulaaravaldise lõpus oleva valikuga $ .

Kõik punktid

Lubatud regulaaravaldise alguses valikuga MatchOptions.DotAll või (?s) .

Tavaliselt sobib punkt . operaatoriga kõik märgid peale reavahetusmärkide [\n\x0b\f\r\x85\u2028\u2029]. Modifikaatori **DotAll** abil leitakse vasted kõigile märkidele, sh ridade vahedele.

Selles näites sobib ainult "Tere", kuna vaikimisi ei sobi . reale uus rida:

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

Aga kui lisame modifikaatori **DotAll**, siis vastet leitakse reavahetuse ja kõigi järgnevate märkidega:

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

Vabade vahedega

Lubatud parameetriga MatchOptions.FreeSpacing või (?x) regulaaravaldise alguses.

Vabade tühikute kasutamine lihtsustab keeruka regulaaravaldise lugemist ja haldamist. Reeglid on lihtsad:

  • Regulaaravaldises tühikumärke ignoreeritakse, sealhulgas kõiki märke, mis vastavad väärtusele \s. Tühiku sobitamise soovi korral kasutage \s, \ , \t, \r või \n.
  • # alustab kommentaari, mis kestab rea lõpuni. Seda ja kõiki märke, mis järgnevad järgmisele reavahetusmärgile (märke, mis ei sobi kokku ` . ilma ` MatchOptions.DotAll`-ita), ignoreeritakse.
  • Tegelasklassid ei kuulu nende muudatuste hulka. Tühikud ja # käituvad nagu tavaliselt. Näiteks, IsMatch( "a#b c", "(?x)a[ #]b[ #]c" ) tagastab väärtuse true. Mõned regulaaravaldiste keeled sisaldavad vabade tühikutega märgiklasse või pakuvad valikut nende lisamiseks, aga Power Fx seda ei paku.

Näiteks on siin keeruline regulaaravaldis ISO 8601 kuupäeva ja kellaaja sobitamiseks:

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 siin on identne regulaaravaldis vaba reavahega, mis kasutab mitut rida, rühmade taanet ja regulaaravaldiste kommentaare, muutes selle versiooni lihtsamini mõistetavaks, valideeritavaks ja hooldatavaks.

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

Ignoreeri suur- ja väiketähti

Lubatud regulaaravaldise alguses oleva parameetriga MatchOptions.IgnoreCase või (?i) .

Otsib teksti tähes, mis ei ole suur- ega väiketähtede suhtes tundlikud: suurtähed vastavad väiketähtedele ja väiketähed vastavad suurtähtedele.

Näiteks:

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

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

Enamik osasid või Power Fx on kultuuriteadlikud, aga mitte siin. Kultuuriinvariantse sobitamise kasutamine on regulaaravaldiste valdkonna standard, sealhulgas JavaScriptis ja Perlis. See on kasulik teises näites, kus süsteemiressurssi vastendatakse, näiteks kultuuris tr-TR , kus I ei ole ` i` suurtähtedega vaste.

Kui on vaja kultuuriteadlikku ja suur- ja väiketähti mittetunnustavat vastet, kasutage sobivate märkidega hoopis tähemärkide klassi, näiteks esimese näite puhul [Hh][Ee][Ll][Ll][Oo] .

Mitmerealine

Lubatud parameetriga MatchOptions.Multiline või (?m) regulaaravaldise alguses.

Tavaliselt vastavad ^ ja $ ankrud sisendteksti algusele ja. Mitmerealise modifikaatori korral vastavad need ankrud sisendteksti ridade algusele ja lõpule, kus iga rida lõpeb märgiga , \r, \n või sisendi lõpuga. \r\n Näiteks:

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

Eelmääratletud mustrid

Eelmääratletud mustrid võimaldavad teil sobitada kas ühe tähemärgi komplektist või mitme tähemärgi jada. Kasutage ``string-concatenation operator`` ``& ``& ``, et kombineerida oma tekstistringe ``Match ``enum’i liikmetega: ``

Vastendamise loetelu Kirjeldus Regulaaravaldis
Mistahes Vastab suvalisele märgile. .
Koma Vastab komale ,. ,
Number Vastab ühekohalisele numbrile (0 kuni 9 ja teistele \p{Nd} liikmetele). \d
E-post Leiab vaste e-posti aadressile, mis sisaldab sümbolit "ät" (@), ja domeeninimele, mis sisaldab vähemalt ühte punkti (.), mis on eraldatud tühiku ja kirjavahemärkidega. vaata märkust
Sidekriips Vastab sidekriipsule. - vaata märkust
Vasak sulg Vastab vasakule sulule (. \(
Kiri Vastab tähele. \p{L}
Mitu numbrit Vastab ühele või mitmele numbrile. \d+
Mitmekordsed tähed Vastab ühele või mitmele tähele. \p{L}+
Mitmed mittetühikud Vastendab ühele või mitmele märgile, mis ei lisa tühikut (mitte tühikut, tabulaatorit ega reapiiri). \S+
Mitmed ruumid Vastab ühele või mitmele märgile, mis ei lisa tühikut (mitte tühikut, tabulaatorit ega reapiiri). \s+
Mitteruum Vastab ühele märgile, mis ei lisa tühikut. \S
Valikulised numbrid Vastab nullile, ühele või mitmele numbrile. \d*
Valikulised tähed Vastab nullile, ühele või mitmele tähele. \p{L}*
Valikulised mittetühikud Vastab nullile, ühele või mitmele märgile, mis ei lisa tühikut. \S*
Valikulised ruumid Vastab nullile, ühele või mitmele märgile, mis lisavad tühiku. \s*
Periood Vastab punktile või täpile .."). \.
Paremsulg Vastab parempoolsele sulule ). \)
Kosmos Vastab märgile, mis lisab tühiku. \s
Vahekaart Ühtib vahekaardi märkega. \t

Näiteks muster "A" & Match.MultipleDigits" leiab vaste tähega "A", millele järgneb üks või mitu numbrit.

Muster `Match.Email` on keerulisem kui ülejäänud. See tuvastab ja eraldab levinud e-posti aadresse kujul local@hostname.tld, võimalik, et pikkadest tekstilõikudest, ning toetab rahvusvahelisi tähemärke ja emotikone. Kasutage seda vormi valideerimiseks, mis võtab sisendina vastu e-posti aadressi, kiire testina, et sisend on e-posti vormis. Kui te ei tee ekstraktimist, kasutage e-posti aadressi tuvastamiseks funktsiooni MatchOptions.Complete , näiteks tekstisisestusjuhtelemendis.

Siiski ei kontrolli funktsioon Match.Email , kas e-posti aadress vastab kõigile paljudele pidevalt arenevatele e-posti aadresside, domeeninimede ja tippdomeenide standarditele, mis nõuaksid keeruka regulaaravaldise kasutamist, mida tuleks aeg-ajalt uuendada. Kuigi enamikku e-posti aadresse käsitletakse ootuspäraselt, leiab funktsioon `Match.Email` vasteid mõne sobimatu tähe- või tähemärgi puhul, näiteks hostinimes oleva alakriipsu puhul, ja mitte mõne kehtiva tähe- või tähemärgi puhul, näiteks jutumärkides e-posti aadresside või IP-aadresside puhul. Vajadusel on veebis palju regulaaravaldisi, mis aitavad tuvastada tõeliselt seaduslikku e-posti aadressi. Enne tootmiskeskkonnas kasutamist testige alati oma regulaaravaldist vastavalt oma vajadustele.

Kui soovite näha kasutatud regulaaravaldist, arvutage valem Text( Match.Email ). Esimene osa sobitab tähemärke enne @ ja välistab tavalised ASCII kirjavahemärgid vastavalt RFC 822 ja selle redaktsioonidele ning Unicode’i algus- ja lõpp-kirjavahemärgid hõlpsamaks eraldamiseks, näiteks (, [, , « ja . See ei toeta tsitaatides olevate stringide või kommentaaride ebatavalist ja ebasoovitavat kasutamist. Pärast @-i on regulaaravaldise teine ja kolmas osa samad ning eraldatud sümboliga ., tagades, et aadressis on alati vähemalt üks . . Need osad ei sisalda Unicode’i kirjavahemärke, välja arvatud ., - ja _. IP-aadresse ei toetata. Kogu e-posti aadressi ulatuses toetatakse rahvusvahelisi tähemärke ja emotikone.

Versioonis Power Apps, kui ei kasutata versiooni Power Fx 1.0, on funktsioonidel Match.Email ja Match.Hyphen veidi erinevad definitsioonid. Match.Email on lihtsam, aga ei sobi e-posti aadressi eraldamiseks, kuna see hõivab tühikuid. Varem kasutati funktsiooni ` Match.Hyphen`` varjekoodiga väljaspool märgiklassi, mis on nüüd keelatud.

NumberedSubMatches

Lubatud valikuga MatchOptions.NumberedSubMatches ilma reasisese valikuta. (?n) on ühilduvuse tagamiseks selle valiku vastandina toetatud ja see on vaikeväärtus.

Vaikimisi (...) ei jäädvusta, mis on samaväärne sellega, mida enamik süsteeme nimetab "eksplitsiitseks jäädvustamiseks". Jäädvustamiseks kasutage nimega jäädvustust koos (?<name>...) tagasiviitega \k<name>. Nimega jäädvustuste kasutamine parandab jõudlust, kuna ei jäädvustata mittevajalikke rühmi, nimede abil parandatakse selgust ja vähendatakse vigade tekkimise tõenäosust, kui jäädvustuste asukoht muutub.

Kui teil on olemasolev regulaaravaldis, võib see sõltuda rühmade automaatsest jäädvustamisest ja nummerdamisest, sealhulgas nummerdatud tagasiviidetest. See käitumine on saadaval valiku MatchOptions.NumberedSubMatches abil.

Nimega ja nummerdatud alamvasteid ei saa koos kasutada. Kuna mõned rakendused käsitlevad nummerdatud ja nimetatud püüdmisgruppide kombinatsiooni erinevalt, Power Fx keelatakse see.

Võimalikud tühjad alamvasted

Nagu sissejuhatuses öeldud, on ` Power Fx` regulaaravaldised tahtlikult piiratud funktsioonidega, mida saab järjepidevalt rakendada .NET-is, JavaScriptis ja teistes programmeerimiskeelte regulaaravaldiste mootorites. Autorlusaegsed vead takistavad selliste funktsioonide kasutamist, mis ei kuulu sellesse komplekti.

Üks valdkond, mis võib implementatsioonide vahel erineda, on tühjade alamvastete käsitlemine. Näiteks vaatleme regulaaravaldist (?<submatch>a*)+ , millelt küsitakse vastet tekstile a. .NET-is annab alamvaste tulemuseks tühja tekstistringi, JavaScriptis aga a. Mõlemat võib pidada korrektseks teostuseks, kuna kvantorit saab rahuldada tühja stringiga, kuna rühma sisul on kvantor. +*

Erinevate tulemuste vältimiseks eri implementatsioonides ei saa kvantoriga kasutada tühje alamvasteid. Power Fx Siin on näited selle kohta, kuidas alamvaste võib olla tühi:

Näited Kirjeldus
(?<submatch>a{0,}b*)+ Kogu alamvaste sisu on valikuline, seega võib kogu alamvaste olla tühi.
((<submatch>a)?b)+ Kuna ? jääb alamvastest väljapoole, on alamvaste tervikuna valikuline.
(?<submatch>a|b*)+ Alammatši sees millegi tühjaga vaheldumine võib põhjustada kogu alammatši tühjaks jäämise.
((?<submatch>a)|b)+ Alamvastevälised vaheldumised võivad sobida, b sel juhul oleks alamvaste tühi.

Alamvaste väli ` (?<submatch>a+)+ ` ei saa olla tühi, sest alamvastes peab olema vähemalt üks ` a ` ja see on toetatud.

Unicode

Power Fx Regulaaravaldised kasutavad Unicode’i kategooriaid elementide \w, \d ja \s defineerimiseks, kusjuures konkreetsed kategooriad on saadaval elementide \p{..} kaudu.

Need definitsioonid võivad platvormide lõikes erineda. Näiteks Unicode’i standardit uuendatakse aeg-ajalt uute märkidega, mida platvormid hiljem oma tempos rakendavad. Kuni kõik platvormid on uuendatud, on tulemustes platvormide lõikes erinevusi.

Power Fx Regulaaravaldised tagavad, et kategooriateave on alati saadaval mitmekeelse põhitasandi (tähemärgid U+0 kuni U+ffff) jaoks. Mõned platvormid ei rakenda kategooriaid tähemärkidele täiendavas mitmekeelses plaanis ja sellest kaugemal (U+10000 kuni U+10ffff). See piirang ei ole tavaliselt probleem, kuna kõige sagedamini kasutatakse Basic Multilingual Plane’i märke. Kui teie stsenaariumis osalevad tegelased vanuses U+10000 või suuremad, kasutage kategooriate asemel otse tegelaste väärtusi. Testi oma regulaaravaldisi platvormidel, mida kavatsed kasutada.

Platvormide vahel võib esineda väikeseid erinevusi. Näiteks ei pruugi mõned platvormid näha ſ vastavust, s kui MatchOptions.IgnoreCase käivitatakse. Kui need märgid on teie stsenaariumi jaoks olulised, kasutage tähemärgiklassi, näiteks [ſsS] , et sobitada tähesuurust ja lisada soovitud märgid selgesõnaliselt.