RegExReplace() [v1.0.45+]

문자열 안에서 패턴 (정규 표현식)에 부합하는 것들을 교체합니다.

NewStr := RegExReplace(Haystack, NeedleRegEx , Replacement := "", OutputVarCount := "", Limit := -1, StartingPos := 1)

매개변수

Haystack

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

NeedleRegEx

검색 할 패턴, 펄-호환의 정규 표현식입니다 (PCRE). 패턴의 옵션은 문자열 처음에 포함해야 하고 그 다음에 닫는 반괄호가 따라 옵니다. 예를 들어, 패턴 i)abc.*123는 대소문자 비구분 옵션을 켜고 "abc"를 검색 한 다음, 0개 이상의 문자를 검색하고, 다음에 "123"을 검색합니다. 옵션이 없다면, ")"는 선택적입니다; 예를 들어, )abcabc와 동등합니다.

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

Specify a output variable in which to store the number of replacements that occurred (0 if none).

Limit

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

StartingPos

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

StartingPos이 보다 작으면, Haystack 끝으로부터의 상대거리고 간주합니다. 예를 들어, 0은 마지막 문자에서 시작하고, -1은 마지막 문자 바로 앞에서 시작합니다. StartingPosHaystack의 왼쪽 끝을 넘어서 시도하면, 모든 Haystack을 검색합니다.

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

반환 값

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

에러 처리

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

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

Options

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

수행성능

To replace simple substrings, use StrReplace() or StringReplace because it is faster than RegExReplace().

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

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

연구 옵션 (S)으로 종종 (예를 들어 회돌이 안에서) 많이 사용되는 정규 표현식의 수행성능을 개선시킬 수 있습니다.

논평

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

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

정규 표현식의 기본을 배우려면 (또는 패턴 구문을 새롭게 기억해 보려면), RegEx 간편 참조서를 참조하십시오.

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

텍스트 데이터를 얻는 흔한 방법: FileRead, UrlDownloadToFile, Clipboard, GUI 편집 콘트롤

예제

일반적인 RegEx 예제들은 RegEx 간편 참조서를 참조하십시오.

Reports "abc123xyz" because the $ allows a match only at the end.

MsgBox % RegExReplace("abc123123", "123$", "xyz")

Reports "123" because a match was achieved via the case-insensitive option.

MsgBox % RegExReplace("abc123", "i)^ABC")

Reports "aaaXYZzzz" by means of the $1 backreference.

MsgBox % RegExReplace("abcXYZ123", "abc(.*)123", "aaa$1zzz")

Reports an empty string and stores 2 in ReplacementCount.

MsgBox % RegExReplace("abc123abc456", "abc\d+", "", ReplacementCount)