about_Regular_Expressions

Rövid leírás

Reguláris kifejezések leírása a PowerShellben.

Hosszú leírás

Megjegyzés

Ez a cikk a normál kifejezések PowerShellben való használatának szintaxisát és metódusait mutatja be, nem az összes szintaxist tárgyaljuk. A teljesebb referenciát a Reguláris kifejezés nyelve – Gyorshivatkozás című témakörben talál.

A reguláris kifejezés a szövegnek megfelelő minta. Literális karakterekből, operátorokból és egyéb szerkezetekből állhat.

Ez a cikk a PowerShell reguláris kifejezésszintaxisát mutatja be. A PowerShell több reguláris kifejezést használó operátort és parancsmagot is használ. Szintaxisukról és használatukról az alábbi hivatkozásokon olvashat bővebben.

A PowerShell reguláris kifejezései alapértelmezés szerint nem érzékenyek a kis- és nagybetűkre. A fentiekben bemutatott módszerek eltérő módon kényszerítik a kis- és nagybetűk érzékenységét.

  • Ehhez Select-Stringhasználja a CaseSensitive paramétert .
  • Reguláris kifejezéseket használó operátorok esetén használja a kis- és nagybetűket megkülönböztető verziót: -cmatch, -creplacevagy -csplit
  • Az utasításhoz switch használja a -casesensitive

Karakterkonstansok

A reguláris kifejezés lehet literális karakter vagy sztring. A kifejezés hatására a motor pontosan megfelel a megadott szövegnek.

# This statement returns true because book contains the string "oo"
'book' -match 'oo'

Karakterosztályok

Bár a karakterkonstansok akkor működnek, ha ismeri a pontos mintát, a karakterosztályok lehetővé teszik, hogy kevésbé specifikusak legyenek.

Karaktercsoportok

[character group] A lehetővé teszi, hogy egyszerre tetszőleges számú karaktert egyezzen, míg [^character group] csak a CSOPORTBAN NEM szereplő karaktereket.

# This expression returns true if the pattern matches big, bog, or bug.
'big' -match 'b[iou]g'

Ha az egyező karakterek listája tartalmazza a kötőjel karaktert (-), annak a lista elején vagy végén kell lennie, hogy meg tudja különböztetni egy karaktertartomány-kifejezéstől.

Karaktertartományok

A minta karaktertartomány is lehet. A karakterek lehetnek betűrendesek [A-Z], numerikusak [0-9]vagy akár ASCII-alapúak [ -~] (minden nyomtatható karakter).

# This expression returns true if the pattern matches any 2 digit number.
42 -match '[0-9][0-9]'

Számok

A \d karakterosztály minden tizedesjegynek megfelel. Ezzel szemben a \D nem tizedesjegyek megegyeznek.

# This expression returns true if it matches a server name.
# (Server-01 - Server-99).
'Server-01' -match 'Server-\d\d'

Word-karakterek

A \w karakterosztály minden szó karakterének [a-zA-Z_0-9]megfelel. A nem szójeles karaktereket a használatával egyezhet \Wmeg.

# This expression returns true.
# The pattern matches the first word character 'B'.
'Book' -match '\w'

Helyettesítő karakterek

A pont (.) egy helyettesítő karakter a reguláris kifejezésekben. Minden karakternek megfelel, kivéve az új vonalat (\n).

# This expression returns true.
# The pattern matches any 4 characters except the newline.
'a1\ ' -match '....'

Térköz

A térköz a karakterosztály használatával \s van egyeztetve. A nem térköz karaktereket a rendszer a következővel egyezteti \S: . Literál szóközkaraktereket ' ' is használhat.

# This expression returns true.
# The pattern uses both methods to match the space.
' - ' -match '\s- '

Kvantátorok

A kvantátorok határozzák meg, hogy az egyes elemek hány példánya legyen jelen a bemeneti sztringben.

Az alábbiakban néhány, a PowerShellben elérhető kvantitátort íme néhány:

Kvantáló Description
* Nulla vagy több alkalommal.
+ Egy vagy több alkalommal.
? Nulla vagy egyszer.
{n,m} Legalább n, de nem többször m .

A csillag (*) egyezik az előző elem nullával vagy több alkalommal. Az eredmény az, hogy még az elem nélküli bemeneti sztring is egyezés lenne.

# This returns true for all account name strings even if the name is absent.
'ACCOUNT NAME:    Administrator' -match 'ACCOUNT NAME:\s*\w*'

A pluszjel (+) egy vagy több alkalommal felel meg az előző elemnek.

# This returns true if it matches any server name.
'DC-01' -match '[A-Z]+-\d\d'

A kérdőjel ? egyezik az előző elem nullával vagy egyszer. A csillaghoz *hasonlóan a sztringek is megegyeznek azokkal a sztringekkel, ahol az elem hiányzik.

# This returns true for any server name, even server names without dashes.
'SERVER01' -match '[A-Z]+-?\d\d'

A {n, m} kvantáló többféleképpen is használható a kvantáló részletes vezérlésének engedélyezéséhez. A második elem m és a vessző , megadása nem kötelező.

Kvantáló Description
{n} Pontosan n meg kell egyeznie a pontos számmal.
{n,} Egyezzen legalább n hányszor.
{n,m} Egyezés a kettő között n és m a hányszor.
# This returns true if it matches any phone number.
'111-222-3333' -match '\d{3}-\d{3}-\d{4}'

Horgonyok

A horgonyok lehetővé teszik az egyezés sikerességét vagy sikertelenségét a bemeneti sztringen belüli egyezések pozíciója alapján.

A két gyakran használt horgony és ^$. A simító ^ egyezik egy sztring elejével, és $egy sztring végére. A horgonyok lehetővé teszik a szöveg egy adott pozícióban való egyeztetését, miközben elveti a nem kívánt karaktereket is.

# The pattern expects the string 'fish' to be the only thing on the line.
# This returns FALSE.
'fishing' -match '^fish$'

Megjegyzés

Horgonyt tartalmazó $ regex definiálásakor ügyeljen arra, hogy a regexet dupla idézőjelek () helyett szimpla idézőjelek ("') használatával foglalja, vagy a PowerShell változóként bontja ki a kifejezést.

Ha horgonyokat használ a PowerShellben, ismernie kell az egysoros és a többsoros reguláris kifejezés beállításai közötti különbséget.

  • Többsoros: A többsoros mód a bemeneti sztring kezdete és $ vége helyett minden SOR elejét és végét kényszeríti^, és megfelelteti annak.
  • Egysoros: Az egysoros mód a bemeneti sztringet Egyvonalasként kezeli. Kényszeríti a . karaktert, hogy megfeleljen minden karakternek (beleértve az új sorokat is), ahelyett, hogy minden karakternek megfelelteti az új vonalat \n.

Ha többet szeretne megtudni ezekről a lehetőségekről és azok használatáról, látogasson el a Reguláris kifejezés nyelve – rövid útmutató.

Karakterek menekülése

A fordított perjel (\) a karakterek feloldására szolgál, így a reguláris kifejezésmotor nem elemzi őket.

A következő karakterek vannak fenntartva: []().\^$|?*+{}.

Ezeket a karaktereket a mintáiban kell feloldania, hogy azok megegyezhessenek a bemeneti sztringekben.

# This returns true and matches numbers with at least 2 digits of precision.
# The decimal point is escaped using the backslash.
'3.141' -match '3\.\d{2,}'

A regex osztálynak van egy statikus metódusa, amely képes feloldani a szöveget.

[regex]::escape('3.\d{2,}')
3\.\\d\{2,}

Megjegyzés

Ez feloldja az összes fenntartott reguláris kifejezéskarakterek, beleértve a karakterosztályokban használt meglévő fordított perjeleket is. Ügyeljen arra, hogy csak a minta azon részén használja, amelyet el kell menekülnie.

Egyéb karakterek feloldása

Léteznek fenntartott karakteres feloldások is, amelyekkel speciális karaktertípusokat egyeztethet.

Az alábbiakban néhány gyakran használt karakteres feloldás található:

Karakteres feloldás Description
\t Lap egyezése
\n Új vonalnak felel meg
\r Kocsivisszahoz illeszkedik

Csoportok, rögzítések és helyettesítések

A csoportosítási szerkezetek egy bemeneti sztringet rögzíthetők vagy figyelmen kívül hagyható részsztringekké választanak el. A csoportosított részsztringeket alkifejezéseknek nevezzük. Alapértelmezés szerint az alkifejezések számozott csoportokban vannak rögzítve, de hozzájuk is rendelhet neveket.

A csoportosítási szerkezet egy zárójelekkel körülvett reguláris kifejezés. A rendszer rögzíti a zárt reguláris kifejezéssel egyező szövegeket. Az alábbi példa két rögzítési csoportra bontja a bemeneti szöveget.

'The last logged on user was CONTOSO\jsmith' -match '(.+was )(.+)'
True

$Matches A Kivonatoló automatikus változóval lekérheti a rögzített szöveget. A teljes egyezést jelképező szöveg a kulcsban 0van tárolva. Fontos megjegyezni, hogy a $Matches kivonattábla csak az egyező minták első előfordulását tartalmazza.

$Matches.0
The last logged on user was CONTOSO\jsmith

A rögzítéseket numerikus egész számbillentyűk tárolják, amelyek balról jobbra haladnak. A Capture 1 az összes szöveget tartalmazza, amíg a felhasználónév, a capture 2 csak a felhasználónevet tartalmazza.

$Matches
Name           Value
----           -----
2              CONTOSO\jsmith
1              The last logged on user was
0              The last logged on user was CONTOSO\jsmith

Fontos

A 0 kulcs egy egész szám. A tárolt érték eléréséhez bármely Kivonatoló metódust használhat.

PS> 'Good Dog' -match 'Dog'
True

PS> $Matches[0]
Dog

PS> $Matches.Item(0)
Dog

PS> $Matches.0
Dog

Elnevezett rögzítések

Alapértelmezés szerint a rendszer növekvő numerikus sorrendben tárolja a rögzítéseket balról jobbra. Nevet is hozzárendelhet egy rögzítési csoporthoz. Ez a név a Kivonatoló automatikus változó kulcsává $Matches válik.

Egy rögzítési csoportban a rögzített adatok nevesített kulcs alatt való tárolására használható ?<keyname> .

PS> $string = 'The last logged on user was CONTOSO\jsmith'
PS> $string -match 'was (?<domain>.+)\\(?<user>.+)'
True

PS> $Matches

Name                           Value
----                           -----
domain                         CONTOSO
user                           jsmith
0                              was CONTOSO\jsmith

PS> $Matches.domain
CONTOSO

PS> $Matches.user
jsmith

Az alábbi példa a legújabb naplóbejegyzést tárolja a Windows biztonság Naplóban. A megadott reguláris kifejezés kinyeri a felhasználónevet és a tartományt az üzenetből, és a következő kulcsok alatt tárolja őket: N a névhez és D a tartományhoz.

$log = (Get-WinEvent -LogName Security -MaxEvents 1).message
$r = '(?s).*Account Name:\s*(?<N>.*).*Account Domain:\s*(?<D>[A-Z,0-9]*)'
$log -match $r
True
$Matches
Name                           Value
----                           -----
D                              CONTOSO
N                              jsmith
0                              A process has exited....

További információ: Szerkezetek csoportosítása reguláris kifejezésekben.

Helyettesítések reguláris kifejezésekben

A reguláris kifejezések operátorral való -replace használata lehetővé teszi a szöveg dinamikus cseréjét rögzített szöveg használatával.

<input> -replace <original>, <substitute>

  • <input>: A keresendő sztring
  • <original>: A bemeneti sztringben való kereséshez használt reguláris kifejezés
  • <substitute>: A bemeneti sztringben található egyezések cseréjére szolgáló reguláris kifejezéshelyettesítő kifejezés.

Megjegyzés

Az <original> operandusokra <substitute> a reguláris kifejezésmotor szabályai vonatkoznak, például a karakteres menekülésre.

A csoportok rögzítésére a sztring <substitute> hivatkozhat. A helyettesítés a csoportazonosító előtti karakter használatával $ történik.

A csoportok rögzítésére kétféleképpen hivatkozhat : Szám és Név szerint.

  • Szám szerint – A csoportok rögzítése balról jobbra halad.

    'John D. Smith' -replace '(\w+) (\w+)\. (\w+)', '$1.$2.$3@contoso.com'
    
    John.D.Smith@contoso.com
    
  • Név szerint – A csoportok rögzítése név alapján is hivatkozhat gombra.

    'CONTOSO\Administrator' -replace '\w+\\(?<user>\w+)', 'FABRIKAM\${user}'
    
    FABRIKAM\Administrator
    

A $& kifejezés az összes egyező szöveget jelöli.

'Gobble' -replace 'Gobble', '$& $&'
Gobble Gobble

Figyelmeztetés

Mivel a karaktert sztringbővítésben $ használják, literális sztringeket kell használnia helyettesítéssel, vagy el kell menekülnie a $ karakterből dupla idézőjelek használatakor.

'Hello World' -replace '(\w+) \w+', '$1 Universe'
"Hello World" -replace "(\w+) \w+", "`$1 Universe"
Hello Universe
Hello Universe

Továbbá, ha literális karakterként szeretné $ használni, használja $$ a normál feloldókarakterek helyett. Dupla idézőjelek használata esetén a helytelen helyettesítés elkerülése érdekében továbbra is kerülje az összes előfordulást $ .

'5.72' -replace '(.+)', '$$$1'
"5.72" -replace "(.+)", "`$`$`$1"
$5.72
$5.72

További információ: Helyettesítések reguláris kifejezésekben.

Lásd még