문자열이 특정 값으로 끝나는 지 확인하려면 Regex (.NET 구문)을 작성해야합니다. 특히 파일에 특정 확장명 (또는 확장명 집합)이 있는지 테스트해야합니다.Regex를 사용하여 "EndsWith"를 효율적으로 테스트하십시오.
내가 사용하고 해결하기 위해 노력하고있어 코드 : 인 (
역 추적에 아마도 때문에 내 시나리오에서 실패 일치 (대한 무시 무시 느린.*\.(png|jpg|gif)$
는 단순히
.*
을 제거. API가 일치 테스트 만하고 아무 것도 추출하지 않기 때문에) 정규식을 훨씬 효율적으로 만듭니다.
여전히 꽤 비효율적 인 것처럼 느껴집니다. 여기에서 확실하지 않은 것이 있습니까?
불행히도, 문제의 API를 제어하지 않기 때문에 정규 표현식을 작업에 적합한 도구로 간주하지 않더라도 정규 표현식을 사용해야합니다.
나는 또한 RegexOptions.RightToLeft
를 사용하여 몇 가지 테스트를했고, 나는 ^.*\.(png|jpg|gif)$
내 테스트 케이스에서 좀 더 성능을 짜낼 수 있지만 내가 정규식 자체의 문자열 내에서 RightToLeft
옵션을 지정하는 방법을 찾을 수 있다는 것을 발견 그래서 나는 그것을 사용할 수 있다고 생각하지 않는다.
'\. (png | jpg | gif) $'의 속도가 느린 이유는 정규식을 사용하면 가장 간단하다고 생각하기 때문입니다. 나머지는 구현에 달려 있습니다. – adamse
왜 유효한 확장 배열을 반복하고 ['.EndsWith'] (http://msdn.microsoft.com/en-us/library/system.string.endswith (VS.71) .aspx)를 사용하십시오. ? 간단한 문자열 비교는 정규식 엔진보다 훨씬 빠릅니다. – kennytm
얼마나 빨라야합니까? Ruby에서 가장 느린 언어 중 하나인데, 초당 348,000 개의 경로를 비교할 수 있습니다. 나는 더 빠르고 더 읽기 쉽고 이해하기 쉽기 때문에 더 간단한 정규 표현식을 택할 것입니다. –