Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Rövid leírás
A PowerShell szokásos kifejezéseit ismerteti.
Hosszú leírás
Jegyzet
Ez a cikk a normál kifejezések PowerShellben való használatára szolgáló szintaxist és metódusokat mutatja be. Nem terjed ki az összes lehetséges kifejezésre. A teljesebb referenciát a Reguláris kifejezésnyelv – gyorshivatkozásicímű témakörben talál.
A reguláris kifejezés olyan minta, amelyet a szöveg illesztésére használnak. Konstans karakterekből, operátorokból és egyéb szerkezetekből állhat. A PowerShell a .NET regex motort használja.
Ez a cikk a PowerShell szokásos kifejezésszintaxisát mutatja be. A PowerShell több olyan operátort és parancsmagot is használ, amelyek normál kifejezéseket használnak. Szintaxisukról és használatukról az alábbi hivatkozásokon olvashat bővebben.
A PowerShell normál kifejezései alapértelmezés szerint nem érzékenyek a kis- és nagybetűkre. A fentiekben bemutatott módszerek eltérő módon érvényesítik a kis- és nagybetűk megkülönböztetését.
-
Select-Stringesetén használja a CaseSensitive paramétert. - Normál kifejezéseket használó operátorok esetén használja a kis- és nagybetűket megkülönböztető verziót:
-cmatch,-creplacevagy-csplit - A
switchutasításhoz használja a-CaseSensitivelehetőséget
Karakterkonstansok
A reguláris kifejezés lehet literális karakter vagy karakterlánc. 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] lehetővé teszi, hogy bármilyen számú karaktert egyszer illesszen, míg [^character group] csak azokat a karaktereket illeszti, amelyek nincsenek a csoportban.
# 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őjelet (-), akkor a lista elején vagy végén kell lennie, hogy megkülönböztesse a karaktertartomány-kifejezéstől.
Karaktertartományok
A minta karaktertartomány is lehet. A karakterek lehetnek betűrendes [A-Z], numerikus [0-9]vagy akár ASCII-alapú [ -~] (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 a tizedesjegyek kivételével minden karaktert egyeztet.
# 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 bármely szókarakterhez illeszkedik [a-zA-Z_0-9]. Ha nem szó nélküli karaktereket szeretne használni, használja a \W.
# 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. Az új vonal (\n) kivételével bármely karakterrel megegyezik.
# This expression returns true.
# The pattern matches any 4 characters except the newline.
'a1\ ' -match '....'
Szóköz
Bármely szóköz karakter megfeleltethető a \s karakterosztálynak. Bármely nem szóköz karaktert megkereshet a \Ssegítségével. A literális szóköz karaktereket az használatával illesztheti.
# This expression returns true.
# The pattern uses the whitespace character class to match the leading
# space and a literal space to matching the trailing space.
' - ' -match '\s- '
Kvantitátorok
A kvantátorok azt szabályozzák, hogy az egyes elemek hány példánya legyen jelen a bemeneti sztringben.
A PowerShellben elérhető kvantitátorok közül néhány a következő:
| Kvantor | Leírás |
|---|---|
* |
Nulla vagy több alkalommal. |
+ |
Egy vagy több alkalommal. |
? |
Nulla vagy egyszer. |
{n,m} |
Legalább n, de legfeljebb m alkalommal. |
A csillag (*) az előző elemet nulla vagy több alkalommal egyezteti. Az eredmény az, hogy még az elem nélküli bemeneti karakterlánc is egyezik.
# 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 megegyezik az előző elemmel.
# This returns true if it matches any server name.
'DC-01' -match '[A-Z]+-\d\d'
A kérdőjel ? az előző elemmel nullaszor vagy egyszer egyezik meg. A csillaghoz *hasonlóan még azokat a karakterláncokat is illeszti, 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ő , nem kötelező.
| Kvantor | Leírás |
|---|---|
{n} |
Egyezzen meg PONTOSAN n alkalommal. |
{n,} |
Egyezzen legalább n alkalommal. |
{n,m} |
n és m számú egyezés. |
# 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, hogy a bemeneti sztringen belüli egyezések pozíciója alapján az egyezés sikeres legyen, vagy meghiúsuljon.
A két gyakran használt horgony ^ és $. A kalapjel ^ egy sztring elejével egyezik meg, és a $egy sztring végét jelzi. A horgonyok lehetővé teszik, hogy egy adott pozícióban egyezzen a szövegével, 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$'
Jegyzet
Horgonyt ($) tartalmazó regex definiálásakor a regexet egyetlen idézőjelbe (') kell belefoglalnia. Ha kettős idézőjeleket (") használ, a PowerShell kibontható változókifejezésként értelmezi a sztringet.
Ha horgonyokat használ a PowerShellben, ismernie kell a egysoros és többsoros reguláris kifejezési lehetőségek közötti különbséget.
-
többsoros: A többsoros mód arra kényszeríti
^-t és$-t, hogy a BEMENETI SZTRING kezdete és vége helyett minden SOR elejéhez és végéhez igazodjanak. -
Egysoros: Az egysoros mód a bemeneti sztringet egysoros kezeli.
Kényszeríti a
.karaktert, hogy illeszkedjen minden karakterhez (beleértve az újsorokat is), ahelyett, hogy minden karakterhez illeszkedne, KIVÉVE az újsort\n.
Ha többet szeretne megtudni ezekről a lehetőségekről és azok használatáról, látogasson el a Regular Expression Language – Gyors referencia.
Karakterek menekülése
A fordított perjel (\) a karakterek feloldására szolgál, így a normál kifejezésmotor nem elemzi őket.
A következő karakterek vannak fenntartva: [().\^$|?*+{.
Ezeket a karaktereket a mintáiban kódolnia kell ahhoz, hogy megfeleljenek a bemeneti sztringeknek.
# 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 megkerülni a szöveget.
[regex]::Escape('3.\d{2,}')
3\.\\d\{2,}
Jegyzet
Ez feloldja az összes fenntartott reguláris kifejezés karakterét, 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 karakter escape-ek
A speciális karaktertípusokhoz fenntartott karakterkioldók is használhatók.
Az alábbiakban néhány gyakran használt karaktermenekülést ismertetünk:
| Karakter escape | Leírás |
|---|---|
\t |
Egy fül egyezése |
\n |
Egy új vonalnak felel meg |
\r |
Megegyezik egy kocsivissza |
Csoportok, rögzítések és helyettesítések
A csoportosítási szerkezetek egy bemeneti sztringet olyan részsztringekre választanak el, amelyek rögzíthetők vagy figyelmen kívül hagyhatók. A csoportosított alsztringeket alexpresszióknak 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 minden olyan szöveget rögzít, amely megfelel a zárt reguláris kifejezésnek. 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
A rögzített szöveg lekéréséhez használja a hashtábla automatikus változót $Matches.
A teljes mérkőzést reprezentáló szöveg a 0kulcson van tárolva. Fontos megjegyezni, hogy a $Matches hasítótá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ám kulcsok tárolják, amelyek értékükben balról jobbra növekednek. Capture 1 tartalmazza az összes szöveget a felhasználónévig, capture 2 pedig csak a felhasználónevet.
$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ármilyen 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 rögzítések növekvő számsorrendben vannak tárolva, balról jobbra.
Egy nevet is hozzárendelhet egy rögzítési csoporthoz. Ez a név egy kulcs lesz a $Matcheshasítótábla automatikus változóban.
A rögzített csoporton belül a ?<keyname> használatával egy elnevezett kulcs alatt tárolhatja a rögzített adatokat.
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 windowsos biztonsági naplóban tárolja a legújabb naplóbejegyzést. A megadott reguláris kifejezés kinyeri a felhasználónevet és a tartományt az üzenetből, és a kulcsok alatt tárolja őket:N a névhez és D 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ókért lásd: Csoportosítási szerkezetek a reguláris kifejezésekben.
Helyettesítések reguláris kifejezésekben
Ha a regex kifejezést használja a -replace operátorral, dinamikusan lecserélheti a szöveget az elfogott szöveget használva.
<input> -replace <original>, <substitute>
-
<input>: A keresendő karakterlánc -
<original>: A bemeneti sztringben való kereséshez használt reguláris kifejezés -
<substitute>: Regex helyettesítési kifejezés a bemeneti sztringben található egyezések helyére.
A <original> és <substitute> operandusokra a normál kifejezésmotor szabályai vonatkoznak, például a karakteres menekülésre vagy a helyettesítő kifejezésekre. A csereminta egy vagy több helyettesítésből és literális karakterekből állhat.
A rögzítési csoportokra a <substitute> karakterrel lehet hivatkozni a $ sztringben a csoportazonosító előtt.
A rögzítési csoportokra kétféleképpen hivatkozhat: Szám és Név.
Szám – A rögzített csoportok balról jobbra vannak számozva.
'John D. Smith' -replace '(\w+) (\w+)\. (\w+)', '$1.$2.$3@contoso.com'John.D.Smith@contoso.comNév – A rögzítési csoportokra nevük szerint is lehet hivatkozni.
'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 $ karakter a sztringkibővítés során használatos, literál sztringeket kell használnia helyettesítéssel, vagy escape-elnie kell a $ karaktert, ha dupla idézőjelet használ.
'Hello World' -replace '(\w+) \w+', '$1 Universe'
"Hello World" -replace "(\w+) \w+", "`$1 Universe"
Hello Universe
Hello Universe
Továbbá, ha a $ literális karakterként szeretné használni, használja a $$ a normál feloldó karakterek helyett. Dupla idézőjelek használata esetén továbbra is elkerülheti a $ összes példányát a helytelen helyettesítés elkerülése érdekében.
'5.72' -replace '(.+)', '$$$1'
"5.72" -replace "(.+)", "`$`$`$1"
$5.72
$5.72
A helyettesítő kifejezésekkel kapcsolatos részletes információkért lásd A reguláris kifejezések helyettesítései.
Megjegyzések normál kifejezésekben
A reguláris kifejezések nagyon összetettek és nehezen olvashatók. Megjegyzésekkel érthetőbbé teheti őket. A normál kifejezésekben kétféle megjegyzés engedélyezett.
- Beágyazott megjegyzés (
(?#)) - Sorvégi megjegyzés (
#)
További információ: Reguláris kifejezés megjegyzéseiabout_Commentsszakasza.