PowerShell의 정규식 일치
다음을 수행할 수 있는 우아한 원라이너가 있습니까?
$myMatch = "^abc(.*)"
$foo -match $myMatch
$myVar = $matches[1]
저는 관심이 있습니다.$myVar
변수...
그냥 사용.-replace
:
$foo = 'abcDEF'
$myMatch = "^abc(.*)"
$myVar = $foo -replace $myMatch,'$1'
#$myVar contains DEF
저는 다음과 같은 것을 꽤 자주 사용합니다.
([regex]"^abc(.*)").match($foo).groups[1].value
이 제품은 PowerShell-y가 아니거나 최소한 PowerShell V2-y가 아닙니다. (이 제품을 다시 사용하고 있습니다.)NET 클래스)...하지만 꽤나 콤팩트합니다.
해명 후 답변 변경:
진정한 원-라이너:
$myvar = ($foo | ? {$_ -match $myMatch} | @{L="Matches" 선택;E={$matches[1]})). 일치합니다.
가짜 원라이너:
$foo | ? {$_ -match $myMatch}; $myvar = $matches[1]
우아함에 대해서는 잘 모르겠지만, 여기 유용한 것이 있습니다.
PS > "123.134" -match "(?<P1>[0-9]{3})\.(?<P2>[0-9]{3})"
True
PS > $Matches
Name Value
---- -----
P2 134
P1 123
0 123.134
PS > $Matches["P1"]
123
?<P1>
레이블을 지정합니다.P1
첫 번째 캡처까지.그것은 이해하는데 도움이 됩니다.
PS > ([regex]("(?<P1>[0-9]{3})\.(?<P2>[0-9]{3})")).matches("123.123")[0].groups["P1"].value
123
사용자의 경우:
PS > $foo = "123.143"
PS > ([regex]("(?<P1>[0-9]{3})\.(?<P2>[0-9]{3})")).matches($foo)[0].groups["P1"].value
123
PS > ([regex]("(?<P1>[0-9]{3})\.(?<P2>[0-9]{3})")).matches($foo)[0].groups["P2"].value
143
기능으로 포장합니다.
이것은 만약 여러분이 이미 효과적인 해결책에 만족하고 이해하고 있지만 더 짧은 해결책이 필요하다면 거의 항상 맞는 답입니다.함수 이름이 제대로 지정되면 자체 문서화 및 재사용 코드 생성도 시작됩니다.뭐가 더 좋을까요?
더 우아하거나 효율적인 솔루션을 찾을 수 있다고 확신하더라도 먼저 기능 호출을 할 수 있고 다른 솔루션이 나오면 한 곳에서 변경하기만 하면 됩니다. 바로 기능 정의 자체입니다.그런 다음 다양한 옵션을 연결하고 꺼내어 모든 사용 사례에 대해 신뢰성을 직접 테스트할 수도 있습니다.뭐가 더 좋을까요?
다른 사람들은 함수 호출 오버헤드에 대해 불평할 수 있지만 이것은 실제로 적절한 개발 단계도 아니고 그것에 대해 걱정할 만한 유형이나 프로그래밍 언어도 아닙니다.앞으로 "귀여운" 원라이너에 대한 실패한 시도를 디버깅하는 것은 항상 훌륭한 클린 기능 호출의 비용을 능가할 것입니다.클린 함수 호출 API에 대한 좋은 결정은 나중에 함수를 클래스 메소드로 전환할 수 있으며 클래스 자체가 높은 수준의 캐싱 및 최적화 기술을 원활하게 랩핑할 수 있습니다.함수 호출의 하위 레벨 최적화는 하위 레벨 언어에 맡겨야 합니다.
언급URL : https://stackoverflow.com/questions/5881573/regular-expression-matching-in-powershell
'programing' 카테고리의 다른 글
Git: 전체 git 내역에 걸쳐 지정된 파일의 한 줄에 대한 다양한 변경 사항을 모두 표시합니다. (0) | 2023.10.04 |
---|---|
XPath에서 대소문자를 구분하지 않는 일치? (0) | 2023.10.04 |
Docker에서 영구 스토리지(예: 데이터베이스)를 처리하는 방법 (0) | 2023.10.04 |
phphmyadmin에서 트리거를 만드는 중 오류 발생 (0) | 2023.10.04 |
CSS에 높이가 설정되지 않은 div의 높이를 가져옵니다. (0) | 2023.10.04 |