문자열이 특정 하위 문자열로 시작하는지 확인하기 위한 정규식 패턴?
문자열이 "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
'programing' 카테고리의 다른 글
Node.js를 사용해야 하는 이유와 시기 (0) | 2023.08.06 |
---|---|
PowerShell을 사용하여 패턴과 일치하는 첫 번째 파일 찾기 (0) | 2023.08.06 |
Ajax, php 및 jQuery를 사용하여 DIV 콘텐츠 변경 (0) | 2023.08.06 |
배열에서 구조체의 값 변경 (0) | 2023.08.06 |
asp.net mvc 2에서 TryUpdateModel을 사용하는 시기와 이유는 무엇입니까? (0) | 2023.08.06 |