RegExReplace() [v1.0.45+]

문자열 안에 나타나는 패턴 (정규 표현식)을 교체합니다.

NewStr := RegExReplace(Haystack, NeedleRegEx [, Replacement = "", OutputVarCount = "", Limit = -1, StartingPosition = 1])
선택

매개변수

NewStr

RegExReplace()는 Haystack의 내용을 연산으로 교체하여 돌려줍니다. 교체가 필요하지 않으면, Haystack은 그대로 반환됩니다. 에러가 일어나면 (예를 들어 NeedleRegEx 안의 구문 에러가 있으면), Haystack은 그대로 반환됩니다 (1.0.46.06 이전 버전은 예외인데, ""를 돌려줍니다) 그리고 ErrorLevel은 0 대신에 아래의 값 중 하나가 설정됩니다.

Haystack

그의 내용이 검색되고 교체될 문자열.

NeedleRegEx

검색할 패턴, Perl-호환 정규 표현식 (PCRE)입니다. 패턴의 옵션은 (있다면) 문자열의 맨 앞에 닫는 반괄호를 포함시켜야 합니다. 예를 들어, 패턴 "i)abc.*123"는 대소문자 구분 옵션을 켜고 "abc"를 찾은 다음, 0 개 이상 문자가 나타나는지 찾고, 다음에 "123"을 찾습니다. 아무 옵션도 없다면, ")"는 선택적입니다; 예를 들어, ")abc"는 "abc"와 동등합니다.

Replacement

부합하면 교체될 문자열, 평범한 텍스트입니다 (정규 표현식 아님). $1와 같은 역참조를 포함할 수 있습니다. Haystack으로부터 첫 번째 부패턴에 부합한 부문자열을 가지고 옵니다. 가장 단순한 역참조는 $0부터 $9입니다. $0은 전체 패턴에 부합한 부문자열입니다. $1은 첫 부패턴에 부합한 부문자열입니다. $2는 두 번째 부패턴에 부합한 부문자열입니다. 등등. 10 이상의 역 참조는 (그리고 선택적으로 9 이하도), 숫자를 활괄호 안에 둘러 싸십시오; 예, ${10}, ${11}, 등등. 이름 부패턴은 그 이름을 활괄호 안에 둘러 싸십시오; 예, ${SubpatternName}. 기호 그대로 $를 지정하려면, $$를 사용하십시오 (이것은 그런 특별 취급이 필요한 유일한 문자입니다; 역사선은 피신시키는 데 전혀 필요하지 않습니다).

부패턴의 대소문자를 변환하려면, $ 다음에 다음 문자 중 하나를 배치하십시오: U 또는 u (대문자), L 또는 l (소문자), T 또는 t (제목격입니다. 즉, 각 단어의 첫 글자가 대문자가 되고 다른 모든 글자는 소문자가 됩니다). 예를 들어, $U1와 $U{1} 둘 모두 첫 부패턴의 대문자 버전으로 변환합니다.

존재하지 않는 역참조와 Haystack에서 아무 것도 부합하지 못한 것들은 -- 예를 들어 "(abc)|(xyz)"의 부패턴 중 하나 -- 빈 문자열로 변환됩니다.

OutputVarCount

일어난 교체의 횟수를 저장할 변수의 이름. 따옴표 처리 없음 (교체가 없으면 0).

Limit

Limit을 생략하면, 기본값은 -1입니다. 기본값은 Haystack에서 발견된 패턴에 부합하면 모두 교체합니다. 그렇지 않으면, 허용할 교체의 최대 횟수를 지정하십시오. Haystack에서 마지막 교체 이후의 오른쪽 부분은 바뀌지 않습니다.

StartingPosition

StartingPosition이 생략되면, 기본값은 1입니다 (Haystack의 시작). 그렇지만, 2를 지정하면 두 번째 문자부터, 3을 지정하면 세 번째 문자부터, 등등 시작할 수 있습니다. StartingPositionHaystack의 길이를 넘어 서면, 검색은 Haystack 끝의 빈 문자열에서 시작됩니다 (결과적으로 아무 교체도 없습니다).

StartingPosition이 1보다 작으면, Haystack 끝으로부터 상대거리(offset)라고 간주합니다. 예를 들어, 0은 마지막 문자에서 시작하고, -1은 마지막 문자 바로 전에서 시작합니다. StartingPositionHaystack의 왼쪽 끝을 넘어가려고 시도하면, 모든 Haystack이 검색됩니다.

StartingPosition의 값에 상관 없이, 반환 값은 언제나 Haystack의 완전한 사본입니다 -- 유일한 차이점은 StartingPosition이 1이었을 때와 비교하여 왼쪽이 좀 덜 변경된다는 것입니다.

ErrorLevel

[v1.1.04+] 이 함수는 실패시 예외를 던질 수 있습니다 ("부합이 발견되지 않음"과 혼동하지 말 것). 더 자세한 정보는 실행시간 에러를 참조하십시오.

ErrorLevel은 다음 중 하나가 설정됩니다:

  • 0이면 에러가 일어나나지 않았다는 뜻입니다.
  • 다음 형태의 문자열: Compile error N at offset M: description. 이 문자열에서, N은 PCRE 에러 번호이고, M은 정규 표현식 안에서 에러가 일어난 위치이면, 그리고 description은 에러를 설명하는 텍스트입니다.
  • 음수이면 정규 표현식을 실행하는 동안에 에러가 일어났다는 뜻입니다. 그런 에러는 별로 없지만, 가장 자주 일어나는 에러는 다음과 같습니다:
    "too many possible empty-string matches" (-22), - 빈 문자열이 너무 많이 부합함
    "recursion too deep" (-21), - 너무 깊이 재귀함
    "reached match limit" (-8). - 부합 제한에 도달함
    이런 일이 일어나면, 패턴을 좀 더 제한적으로 다시 설계하십시오. 예를 들어 가능하면 *?, +,로 교체하고 또는 {0,3}과 같이 제한 하십시오.

옵션

수식자에 관한 것은 옵션을 참조하십시오. 예를 들어 "i)abc"와 같은 경우, "abc" 패턴에서 대소문자 구분을 끕니다.

수행성능

간단한 부문자열을 교체하려면, StringReplace를 사용하십시오. RegExReplace()보다 더 빠릅니다.

교체의 최대 개수를 알 경우, 그것을 Limit 매개변수에 지정하면 수행성능이 향상됩니다. 검색이 더 빨리 끝날 수 있습니다 (이렇게 하면 연산하는 동안 시스템에 메모리 부하도 줄어듭니다.). 예를 들어, 거대한 문자열의 앞쪽 근처에 오직 하나만 부합한다는 사실을 알고 있다면, 1로 제한하십시오.

수행성능을 개선하기 위해, 최근에 사용된 정규 표현식 100개를 (컴파일된 형태로) 메모리에 캐쉬합니다.

연구 옵션 (S)는 종종 (예를 들어 회돌이 안에서) 여러 번 사용되는 정규 표현식의 수행성능을 향상시킵니다.

논평

대부분의 문자들은 abc123과 같이 정규 표현식 안에 기호 그대로 사용할 수 있습니다. 그렇지만, \.*?+[{|()^$ 문자들은 앞에 역사선을 배치해야 기호로 보이게 됩니다. 예를 들어, \.는 기호 그대로 점이고 \\는 기호 그대로 역사선입니다. 피신은 \Q...\E를 사용해 회피할 수 있습니다. 예를 들어: \QLiteral Text\E.

정규 표현식 안에서, 탭과 새줄문자 같은 특수 문자는 액센트 (`) 또는 역사선 (\)으로 피신시킬 수 있습니다. 예를 들어, `t는 \t과 같습니다.

정규 표현식의 기초를 배우려면 (또는 패턴 구문을 다시 상기해 보고 싶다면), RegEx 간편 참조서를 일독 하십시오.

관련 항목

RegExMatch(), RegEx 간편 참조서, 정규 표현식 외부요청, StringReplace, InStr()

텍스트 데이터의 근원: FileRead, UrlDownloadToFile, Clipboard, GUI Edit 콘트롤

예제

NewStr := RegExReplace("abc123123", "123$", "xyz")  ; "abc123xyz"을 돌려줍니다. 왜냐하면 $는 끝에만 부합을 허용하기 
때문입니다.
NewStr := RegExReplace("abc123", "i)^ABC")  ; "123"을 돌려줍니다. 왜냐하면 대소문자 구분 옵션을 통하여 부합에 성공했기 때문입니다.
NewStr := RegExReplace("abcXYZ123", "abc(.*)123", "aaa$1zzz")  ; $1 역참조를 사용하여 "aaaXYZzzz"을 돌려 줍니다.
NewStr := RegExReplace("abc123abc456", "abc\d+", "", ReplacementCount)  ; ""를 돌려주고 2를 ReplacementCount에 저장합니다.

; 일반적인 RegEx 예제는 RegEx 간편 참조서를 일독 하십시오.
선택 | 내려받기