programing

문자열이 특정 하위 문자열로 시작하는지 확인하기 위한 정규식 패턴?

powerit 2023. 8. 6. 10:27
반응형

문자열이 특정 하위 문자열로 시작하는지 확인하기 위한 정규식 패턴?

문자열이 "mailto" 또는 "ftp" 또는 "joe"로 시작하는지 확인하는 정규식은 무엇입니까?

지금 저는 C#과 코드를 사용하고 있습니다. 만약 많은 또는 다음과 같은 경우:

String.StartsWith("mailto:")
String.StartsWith("ftp")

이것은 정규식이 더 나을 것 같습니다.아니면 제가 빠진 C# 방법이 있을까요?

다음을 사용할 수 있습니다.

^(mailto|ftp|joe)

하지만 솔직히 말하면,StartsWith여기까지는 완벽하게 좋습니다.다음과 같이 다시 작성할 수 있습니다.

string[] prefixes = { "http", "mailto", "joe" };
string s = "joe:bloggs";
bool result = prefixes.Any(prefix => s.StartsWith(prefix));

URI를 구문 분석하는 경우 클래스를 볼 수도 있습니다.

다음은 다음으로 시작하는 문자열과 일치합니다.mailto,ftp또는http:

 RegEx reg = new RegEx("^(mailto|ftp|http)");

분해 방법:

  • ^행의 시작과 일치
  • (mailto|ftp|http)a로 구분된 항목 중 하나와 일치합니다.|

찾을 수 있을 겁니다StartsWith이 경우 더 읽기 쉽도록.

StartsWith 메서드는 정규식을 해석하는 데 오버헤드가 없으므로 더 빠릅니다. 그러나 다음과 같은 방법이 있습니다.

if (Regex.IsMatch(theString, "^(mailto|ftp|joe):")) ...

^문자열의 시작과 일치합니다.다음으로 구분된 괄호 사이에 프로토콜을 넣을 수 있습니다.|성격.

편집:

훨씬 빠른 또 다른 접근 방식은 문자열을 시작하여 스위치에서 사용하는 것입니다.스위치는 문자열을 사용하여 해시 테이블을 설정하므로 모든 문자열을 비교하는 것보다 빠릅니다.

int index = theString.IndexOf(':');
if (index != -1) {
  switch (theString.Substring(0, index)) {
    case "mailto":
    case "ftp":
    case "joe":
      // do something
      break;
  }
}

확장 방법 팬의 경우:

public static bool RegexStartsWith(this string str, params string[] patterns)
{
    return patterns.Any(pattern => 
       Regex.Match(str, "^("+pattern+")").Success);
}

사용.

var answer = str.RegexStartsWith("mailto","ftp","joe");
//or
var answer2 = str.RegexStartsWith("mailto|ftp|joe");
//or
bool startsWithWhiteSpace = "  does this start with space or tab?".RegexStartsWith(@"\s");

String을 사용하는 것이 좋습니다.정규식 위의 메서드로 시작합니다.문자열의 시작 부분만 확인하려는 경우 일치합니다.

  • 첫째, C#의 정규 표현식은 이해와 코드 유지에 도움이 되지 않는 언어의 언어입니다.정규식은 DSL의 일종입니다.
  • 두 번째로, 많은 개발자들은 정규 표현을 이해하지 못합니다: 그것은 많은 사람들이 이해할 수 없는 것입니다.
  • 셋째, StartsWith 메서드는 정규 표현식이 인식하지 못하는 문화 의존적 비교를 가능하게 하는 기능을 제공합니다.

이 경우 앞으로 더 복잡한 문자열 비교를 구현할 계획인 경우에만 정규식을 사용해야 합니다.

배열 조각과 String: 방법을 사용하여 ':' 앞에 있는 부분 문자열을 가져올 수 있습니다.검색 하위 문자열이 없는 경우 -1을 반환하는 인덱스입니다.그런 다음 get 결과를 상수 및 논리 패턴(C# 9.0+)과 비교하여 문자열이 정의된 문자열로 시작하는지 확인할 수 있습니다.

string s = "ftp:custom";
int index = s.IndexOf(':');
bool result = index > 0 && s[..index] is "mailto" or "ftp" or "joe";

언급URL : https://stackoverflow.com/questions/2750749/regex-pattern-for-checking-if-a-string-starts-with-a-certain-substring

반응형