수색…
통사론
- '텍스트'- 'RegExPattern'일치
- 'text'-replace 'RegExPattern', 'newvalue'
- [정규식] :: 일치 ( "text", "pattern") # 단일 매치
- [regex] :: 일치 ( "text", "pattern") # 여러 일치
- [regex] :: Replace ( "text", "pattern", "newvalue")
- [정규식] : 바꾸기 ( "text", "pattern", {param ($ m)}) #MatchEvaluator
- [regex] :: Escape ( "input") # 이스케이프 특수 문자
단일 경기
Regex를 사용하여 텍스트에 특정 패턴이 포함되어 있는지 빠르게 판단 할 수 있습니다. PowerShell에서 Regex를 사용하여 작업하는 방법에는 여러 가지가 있습니다.
#Sample text
$text = @"
This is (a) sample
text, this is
a (sample text)
"@
#Sample pattern: Content wrapped in ()
$pattern = '\(.*?\)'
-Match 연산자 사용
문자열이 내장 된 -matches
연산자를 사용하여 패턴과 일치하는지 확인하려면 'input' -match 'pattern'
-matches
-match 'input' -match 'pattern'
구문을 사용하십시오. 검색 결과에 따라 true
또는 false
를 반환 true
. 일치하는 항목이 있으면 $Matches
-variable에 액세스하여 일치 항목과 그룹 (패턴으로 정의 된 경우)을 볼 수 있습니다.
> $text -match $pattern
True
> $Matches
Name Value
---- -----
0 (a)
-match
를 사용하여 문자열 배열을 필터링하고 일치하는 문자열 만 반환 할 수도 있습니다.
> $textarray = @"
This is (a) sample
text, this is
a (sample text)
"@ -split "`n"
> $textarray -match $pattern
This is (a) sample
a (sample text)
Select-String 사용
PowerShell 2.0에서는 regex를 사용하여 텍스트를 검색하는 새로운 cmdlet을 도입했습니다. match가 들어있는 textinput 당 MatchInfo
객체를 MatchInfo
합니다. 일치하는 그룹 등을 찾기 위해 속성에 액세스 할 수 있습니다.
> $m = Select-String -InputObject $text -Pattern $pattern
> $m
This is (a) sample
text, this is
a (sample text)
> $m | Format-List *
IgnoreCase : True
LineNumber : 1
Line : This is (a) sample
text, this is
a (sample text)
Filename : InputStream
Path : InputStream
Pattern : \(.*?\)
Context :
Matches : {(a)}
-match
와 마찬가지로 Select-String
을 사용하여 배열을 배열하여 문자열 배열을 필터링 할 수도 있습니다. 일치하는 것을 포함하는 문자열 당 MatchInfo
-object를 만듭니다.
> $textarray | Select-String -Pattern $pattern
This is (a) sample
a (sample text)
#You can also access the matches, groups etc.
> $textarray | Select-String -Pattern $pattern | fl *
IgnoreCase : True
LineNumber : 1
Line : This is (a) sample
Filename : InputStream
Path : InputStream
Pattern : \(.*?\)
Context :
Matches : {(a)}
IgnoreCase : True
LineNumber : 3
Line : a (sample text)
Filename : InputStream
Path : InputStream
Pattern : \(.*?\)
Context :
Matches : {(sample text)}
Select-String
은 -SimpleMatch
스위치를 추가하여 일반 텍스트 패턴 (정규식 없음)을 사용하여 검색 할 수도 있습니다.
[RegEx] :: Match () 사용하기
.NET [RegEx]
클래스에서 사용할 수있는 정적 Match()
메서드를 사용할 수도 있습니다.
> [regex]::Match($text,$pattern)
Groups : {(a)}
Success : True
Captures : {(a)}
Index : 8
Length : 3
Value : (a)
> [regex]::Match($text,$pattern) | Select-Object -ExpandProperty Value
(a)
바꾸다
정규 표현식의 일반적인 작업은 패턴과 일치하는 텍스트를 새로운 값으로 대체하는 것입니다.
#Sample text
$text = @"
This is (a) sample
text, this is
a (sample text)
"@
#Sample pattern: Text wrapped in ()
$pattern = '\(.*?\)'
#Replace matches with:
$newvalue = 'test'
-Replace 연산자 사용
PowerShell의 -replace
연산자를 사용하면 'input' -replace 'pattern', 'newvalue'
구문을 사용하여 패턴과 일치하는 텍스트를 새 값으로 바꿀 수 있습니다.
> $text -replace $pattern, $newvalue
This is test sample
text, this is
a test
[RegEx] :: Replace () 메서드 사용하기
일치 항목 Replace()
는 [RegEx]
.NET 클래스의 Replace()
메서드를 사용하여 수행 할 수도 있습니다.
[regex]::Replace($text, $pattern, 'test')
This is test sample
text, this is
a test
MatchEvalutor를 사용하여 텍스트를 동적 값으로 대체하십시오.
경우에 따라 패턴과 일치하는 값을 특정 일치 항목을 기반으로하는 새 값으로 대체해야 새로운 값을 예측할 수 없게됩니다. 이러한 유형의 시나리오의 경우 MatchEvaluator
가 매우 유용 할 수 있습니다.
PowerShell에서 MatchEvaluator
는 현재 일치하는 Match
개체를 포함하는 단일 매개 변수가있는 스크립트 블록만큼 간단합니다. 동작의 출력은 해당 특정 일치에 대한 새 값입니다. MatchEvalutor
는 [Regex]::Replace()
정적 메서드와 함께 사용할 수 있습니다.
예 : inside ()
텍스트를 길이로 바꾸기
#Sample text
$text = @"
This is (a) sample
text, this is
a (sample text)
"@
#Sample pattern: Content wrapped in ()
$pattern = '(?<=\().*?(?=\))'
$MatchEvalutor = {
param($match)
#Replace content with length of content
$match.Value.Length
}
산출:
> [regex]::Replace($text, $pattern, $MatchEvalutor)
This is 1 sample
text, this is
a 11
예 : 대문자로 sample
만들기
#Sample pattern: "Sample"
$pattern = 'sample'
$MatchEvalutor = {
param($match)
#Return match in upper-case
$match.Value.ToUpper()
}
산출:
> [regex]::Replace($text, $pattern, $MatchEvalutor)
This is (a) SAMPLE
text, this is
a (SAMPLE text)
특수 문자 이스케이프
정규식 패턴은 많은 특수 문자를 사용하여 패턴을 설명합니다. 예., .
"임의의 문자"를 의미하고, +
는 "하나 이상의 문자"등을 의미합니다.
이러한 문자를 사용하려면 a .
, +
등의 패턴을 사용하면 특수 의미를 제거하기 위해 이스케이프 처리해야합니다. 이것은 정규 표현식에서 백 슬래시 \
이스케이프 문자를 사용하여 수행됩니다. 예 : +
를 검색하려면 \+
패턴을 사용합니다.
regex의 모든 특수 문자를 기억하기가 어려울 수 있으므로 검색하려는 문자열의 모든 특수 문자를 이스케이프하려면 [RegEx]::Escape("input")
메서드를 사용할 수 있습니다.
> [regex]::Escape("(foo)")
\(foo\)
> [regex]::Escape("1+1.2=2.2")
1\+1\.2=2\.2
여러 경기
텍스트의 패턴과 일치하는 것을 모두 찾는 여러 가지 방법이 있습니다.
#Sample text
$text = @"
This is (a) sample
text, this is
a (sample text)
"@
#Sample pattern: Content wrapped in ()
$pattern = '\(.*?\)'
Select-String 사용
당신은 추가하여 모든 일치 (글로벌 경기)을 찾을 수 있습니다 -AllMatches
스위치를 Select-String
.
> $m = Select-String -InputObject $text -Pattern $pattern -AllMatches
> $m | Format-List *
IgnoreCase : True
LineNumber : 1
Line : This is (a) sample
text, this is
a (sample text)
Filename : InputStream
Path : InputStream
Pattern : \(.*?\)
Context :
Matches : {(a), (sample text)}
#List all matches
> $m.Matches
Groups : {(a)}
Success : True
Captures : {(a)}
Index : 8
Length : 3
Value : (a)
Groups : {(sample text)}
Success : True
Captures : {(sample text)}
Index : 37
Length : 13
Value : (sample text)
#Get matched text
> $m.Matches | Select-Object -ExpandProperty Value
(a)
(sample text)
[RegEx] :: Matches () 사용하기
.NET`[regex] -class의 Matches()
메소드를 사용하여 여러 개의 일치 항목에 대한 전역 검색을 수행 할 수도 있습니다.
> [regex]::Matches($text,$pattern)
Groups : {(a)}
Success : True
Captures : {(a)}
Index : 8
Length : 3
Value : (a)
Groups : {(sample text)}
Success : True
Captures : {(sample text)}
Index : 37
Length : 13
Value : (sample text)
> [regex]::Matches($text,$pattern) | Select-Object -ExpandProperty Value
(a)
(sample text)