Regular Expressions
정규식으로 대체
수색…
매개 변수
인라인 | 기술 |
---|---|
$ number | 그룹 번호와 일치하는 부분 문자열을 대체합니다. |
$ {name} | 명명 된 그룹 이름과 일치하는 하위 문자열을 대체합니다. |
$$ | 결과 (대체) 문자열에서 이스케이프 된 '$'문자. |
$ & ($ 0) | 일치하는 전체 문자열로 대체합니다. |
$ + ($ &) | 일치하는 텍스트를 캡처 된 마지막 그룹으로 대체합니다. |
$` | 일치하는 모든 텍스트를 일치하기 전에 일치하지 않는 모든 텍스트로 대체합니다. |
$ ' | 일치하는 모든 텍스트를 일치 후 일치하지 않는 텍스트로 대체합니다. |
$ _ | 일치하는 모든 텍스트를 전체 문자열로 대체합니다. |
노트 : | 기울임 꼴 은 문자열이 휘발성이라는 것을 의미합니다 (정규 표현식에 따라 다를 수 있음). |
대체의 기초
텍스트를 정규식으로 대체하는 가장 보편적이며 유용한 방법 중 하나는 캡처 그룹 을 사용하는 것입니다.
또는 명명 된 캡처 그룹을 참조 용으로 저장하거나 데이터를 바꿀 수 있습니다.
regex의 문서에서는 두 가지 용어가 비슷하게 보이므로 대입 (예 : $1
)과 역 참조 (즉, \1
)를 섞지 않는 것이 중요합니다. 대체 용어는 대체 텍스트에 사용됩니다. 순수 Regex 표현식에서 역 참조. 일부 프로그래밍 언어가 대체 언어를 둘 다 받아들지만, 고무적이지는 않습니다.
우리는이 정규식을 가지고 있다고 가정합시다 : /hello(\s+)world/i
. $number
가 참조 될 때마다 (이 경우, $1
), \s+
와 일치하는 공백이 대신 대체됩니다.
동일한 결과가 regex : /hello(?<spaces>\s+)world/i
노출됩니다. 여기에 이름이 지정된 그룹이 있으므로 ${spaces}
도 사용할 수 있습니다.
이 예제에서 $0
또는 $&
( 참고 : $&
는 다른 정규식 엔진에서 LAST 캡처 그룹을 검색하는 대신 $+
로 사용할 수 있습니다.), 작업중인 정규 표현식에 따라, 일치하는 전체 텍스트를 가져올 수 있습니다. (즉 $&
는 hEllo woRld
문자열을 반환합니다 : hEllo woRld of Regex!
)
$number
와 ${name}
구문을 사용하여 존 레넌 (John Lennon)의 적용된 견적을 사용하여 간단한 대체 예제를 살펴보십시오. 명명 된 캡처 그룹 예제 :
고급 교체
일부 프로그래밍 언어는 일치하는 텍스트를 캡처 된 마지막 그룹으로 대체하는 $+
용어 (C #, Perl, VB 등)와 같은 자체 Regex 특성을 가지고 있습니다.
예:
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\w+)\s\1\b";
string substitution = "$+";
string input = "The the dog jumped over the fence fence.";
Console.WriteLine(Regex.Replace(input, pattern, substitution,
RegexOptions.IgnoreCase));
}
}
// The example displays the following output:
// The dog jumped over the fence.
Microsoft 공식 개발자 네트워크 [1]의 예
기타 드문 대체 용어는
$`
및 $'
. $`
= 일치하는 문자열 앞 의 텍스트와 일치하는 문자열을 대체합니다.
$'
= 일치하는 문자열 다음 에 일치하는 텍스트를 대체합니다.
이 사실로 인해 이러한 대체 문자열은 다음과 같이 작업해야합니다.
Regex: /part2/
Input: "part1part2part3"
Replacement: "$`"
Output: "part1part1part3" //Note that part2 was replaced with part1, due &` term
---------------------------------------------------------------------------------
Regex: /part2/
Input: "part1part2part3"
Replacement: "$'"
Output: "part1part3part3" //Note that part2 was replaced with part3, due &' term
다음은 자바 스크립트에서 작동하는 이러한 대체의 예입니다.
var rgx = /middle/;
var text = "Your story must have a beginning, middle, and end"
console.log(text.replace(rgx, "$`"));
//Logs: "Your story must have a beginning, Your story must have a beginning, , and end"
console.log(text.replace(rgx, "$'"))
//Logs: "Your story must have a beginning, , and end, and end"
또한 일치하는 텍스트 전체를 검색하는 용어
$_
가 있습니다. Regex: /part2/
Input: "part1part2part3"
Replacement: "$_"
Output: "part1part1part2part3part3" //Note that part2 was replaced with part1part2part3,
// due $_ term
이것을 VB로 변환하면 다음과 같이됩니다.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "ABC123DEF456"
Dim pattern As String = "\d+"
Dim substitution As String = "$_"
Console.WriteLine("Original string: {0}", input)
Console.WriteLine("String with substitution: {0}", _
Regex.Replace(input, pattern, substitution))
End Sub
End Module
' The example displays the following output:
' Original string: ABC123DEF456
' String with substitution: ABCABC123DEF456DEFABC123DEF456
Microsoft 공식 개발자 네트워크 [2]의 예
그리고 마지막으로 적어도 대체 단어는 $$
. 정규식으로 변환하면 \$
(이스케이프 된 리터럴 $ 버전)와 같습니다.
다음과 같은 문자열을 일치 시키려면 : USD: $3.99
예를 들어, 3.99
를 저장하고 $3.99
로 바꾸려면 하나의 정규식 만 사용하면됩니다.
Regex: /USD:\s+\$([\d.]+)/
Input: "USD: $3.99"
Replacement: "$$$1"
To Store: "$1"
Output: "$3.99"
Stored: "3.99"
Javascript로 테스트 해 보려면 다음 코드를 사용할 수 있습니다.
var rgx = /USD:\s+\$([\d.]+)/;
var text = "USD: $3.99";
var stored = parseFloat(rgx.exec(text)[1]);
console.log(stored); //Logs 3.99
console.log(text.replace(rgx, "$$$1")); //Logs $3.99
참고 문헌
[1] : 마지막으로 캡처 한 그룹 바꾸기
[2] : 전체 입력 문자열 대체