수색…


매개 변수

인라인 기술
$ 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)의 적용된 견적을 사용하여 간단한 대체 예제를 살펴보십시오.

단순 캡처 그룹 예 : 치환 예 1

명명 된 캡처 그룹 예제 :

대체 예 2

고급 교체

일부 프로그래밍 언어는 일치하는 텍스트를 캡처 된 마지막 그룹으로 대체하는 $+ 용어 (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] : 전체 입력 문자열 대체



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow