> 백엔드 개발 > C++ > C# Regex.Replace()에서 인라인 정규식 구분 기호가 작동하지 않는 이유는 무엇입니까?

C# Regex.Replace()에서 인라인 정규식 구분 기호가 작동하지 않는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-22 04:31:09
원래의
441명이 탐색했습니다.

Why Doesn't Inline Regex Delimiter Work in C# Regex.Replace()?

C# Regex: 인라인 구분 기호 피하기

문제:

C#에서 정규식을 사용할 때 흔히 발생하는 함정은 인라인 구분 기호를 잘못 적용하는 것입니다. 이로 인해 문자열 교체를 시도할 때 예상치 못한 동작이 발생하는 경우가 많습니다. 예를 들어 "/", "-" 및 "."을 제거하도록 설계된 정규식입니다. 문자열에서 실패할 수 있습니다.

예:

다음 코드는 "/", "-" 및 "."를 바꾸려고 시도합니다. 빈 문자열을 사용하면 올바르게 작동하지 않습니다.

<code class="language-csharp">string name = "dr-det-fb.ydp.eu/ebook/trunk/annotations/ctrl.php/api1751-4060-1193-0487";
name = Regex.Replace(name, @"/\W/g", ""); // Incorrect usage of delimiters</code>
로그인 후 복사

해결책:

C#은 정규식 구문이 PHP, Perl, JavaScript와 같은 언어와 다릅니다. 인라인 구분 기호(위 예의 / 등)는 지원되지 않습니다. 올바른 접근 방식은 이를 생략하는 것입니다.

<code class="language-csharp">string name = "dr-det-fb.ydp.eu/ebook/trunk/annotations/ctrl.php/api1751-4060-1193-0487";
name = Regex.Replace(name, @"\W", ""); // Correct syntax</code>
로그인 후 복사

"/", "-" 및 "."를 구체적으로 타겟팅하려면 문자 클래스를 사용하세요.

<code class="language-csharp">name = Regex.Replace(name, @"[/\-\.]", ""); // Correctly targets specific characters</code>
로그인 후 복사

설명:

정규식 문자열 앞의 @ 기호는 축어적 문자열 리터럴을 나타내므로 C#이 백슬래시를 특별히 해석하지 못하게 됩니다. W은 영숫자가 아닌 모든 문자와 일치하여 "/", "-", "." 및 기타 유사한 기호를 효과적으로 제거합니다. 향상된 예제에서는 문자 클래스 [/-.]를 사용하여 제거할 문자를 명시적으로 정의합니다. g 플래그(전역 대체)는 C#의 Regex.Replace에 의해 암시적으로 처리됩니다. 따라서 C# Regex.Replace 메서드

에는 구분 기호나 전역 플래그가 필요하지 않습니다.

위 내용은 C# Regex.Replace()에서 인라인 정규식 구분 기호가 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿