[objective-c] Objective-C Cocoa 응용 프로그램의 정규식

초기 인터넷 검색은 Objective-C Cocoa 애플리케이션에서 정규 표현식을 수행 할 수있는 기본 제공 방법이 없음을 나타냅니다.

따라서 네 가지 질문이 있습니다.

  1. 정말 맞습니까?

  2. 농담 해?

  3. 그렇다면 추천 할만한 훌륭한 오픈 소스 라이브러리가 있습니까?

  4. NSScanner 클래스를 사용하여 라이브러리를 가져 오지 않고 충분히 가까워지는 방법은 무엇입니까?



답변

iOS 4.0부터 Apple은 NSRegularExpression 클래스를 제공합니다 . 또한 10.7부터 클래스는 OS X에서 사용할 수 있습니다 .


답변

  1. 예, 코코아에서는 정규식 지원이 없습니다. 부울 일치에만 관심이있는 경우 ICU 정규식 구문을 지원 하는 NSPredicate 를 사용할 수 있습니다 . 그러나 일반적으로 하위 표현식의 일치 또는 위치에 관심이 있으며 NSPredicate를 사용하여 얻을 수 없습니다.
  2. 언급했듯이 정규식 POSIX 함수를 사용할 수 있습니다 . 그러나 그것들은 느리게 간주되며 정규 표현식 구문은 다른 솔루션 (ICU / pcre )에 비해 제한 됩니다.
  3. 많은 OSS 라이브러리가 있으며 CocoaDev는 광범위한 목록을 가지고 있습니다.
  4. 예를 들어 RegExKitLite 에는 라이브러리가 필요하지 않습니다. 프로젝트에 .m 및 .h를 추가하십시오.

    (RegExKitLite에 대한 불만은 카테고리를 통해 NSString을 확장하지만 기능으로 간주 될 수 있다는 것입니다. 또한 OS와 함께 제공되는 비공개 ICU 라이브러리를 사용하며 Apple에서 권장하지 않습니다.)


답변

RegexKit은 내가 찾은 최고입니다. 매우 코코아 : y. 여러 iPhone 앱에서 “Lite”버전을 사용하고 있습니다.

소스 포지

Lingonikorg


답변

POSIX 정규식 라이브러리를 사용할 수 있습니다 (POSIX 호환 OS의 경우 예). 시험

man 3 regex


답변

REGEX 및 JSON 파싱 문제를 해결하는 데 사용하는 저렴하고 더러운 해킹 솔루션은 UIWebView 객체를 만들고 파싱을 수행하기 위해 Javascript 함수를 주입하는 것입니다. 그런 다음 javascript 함수는 내가 관심있는 값 (또는 값 목록)의 문자열을 반환합니다. 실제로 특정 작업에 맞게 사용자 정의 된 작은 라이브러리 함수를 저장 한 다음 필요에 따라 호출 할 수 있습니다.

이 기술이 엄청난 양의 반복되는 구문 분석 요청으로 확장되는지는 모르겠지만 빠른 트랜잭션 작업을 위해 이해할 수없는 추가 외부 리소스 또는 코드에 의존하지 않고 작업을 수행합니다.


답변

PCRE를 사용하는 AGRegex 프레임 워크가 마음에 들어 PCRE 구문에 익숙하다면 편리합니다. 이 프레임 워크의 최고 버전은 PCRE 6.7을 사용하도록 업그레이드 된 Colloquy IRC 클라이언트의 프레임 워크입니다.

http://colloquy.info/project/browser/trunk/Frameworks/AGRegex

RegExKit보다 훨씬 가볍습니다 (물론 가능하지는 않지만).


답변

NSRegularExpression Mac OS X v10.7 및 IOS 4.0부터 사용할 수 있습니다.