2009-06-09 4 views
0

그래서 RegExKitLite를 사용하여 NSString에서 URL을 추출하려고하는데 이상한 문제가 발생했습니다.RegExKitLite 및 앰퍼샌드 문제

NSLog(@"Array: %@", [message componentsMatchedByRegex:@"^(http://)[-a-zA-Z0-9+&@#/%?=~_()|!:,.;]*"]); 

NSString * 메시지는 URL이 포함 된 텍스트 일뿐입니다. 이상한 것은 앰퍼샌드로 작동하지 않는다는 것입니다. 앰퍼샌드를 꺼내면 잘 작동하지만 확실한 이유 때문에 앰퍼샌드를 유지하고 싶습니다. 또한 Regex newb이므로 검색 표현을 많이 부르지 마십시오.

누구나 전에 경험했습니다. RegExKitLite 또는 RegEx와 일반적으로 Objective-C?

답변

4

ICU 정규 표현식 문자 클래스에서 &은 교차를 의미합니다. 예 : @ "[[: letter :] & [a-z]]". 따라서 피터 제안으로 백 슬래시 (\ &)를 정규 표현식으로 인용해야합니다. 그러나 \는 Objective C 문자열을 포함하여 C 문자열에서 특별한 의미를 갖습니다. 그래서 \는 따옴표로 묶어야합니다. 따라서 패턴에 \ &이 필요합니다.

나는 또한 당신의 의도가 무엇인지 확신하지 못합니다.^a-zA-Z0-9 + \ & @ #/%? = ~ _ URL의 시작 정규 표현식을 문자열의 어느 부분과도 일치 시키려면 대신 \ b (단어 분리)를 사용해야합니다. 메시지의 시작 부분에만있는 URL과 일치 시키려면 작성한대로 하나의 일치 항목 만 얻습니다. 줄의 시작 부분에있는 URL과 일치 시키려면 정규식 시작 부분에 (? m)을 추가하여 ^에 대한 여러 줄 일치를 켭니다 (정규식 끝 부분에 $ 추가).

+0

오 대단하다! 나는 탈출구 ("\\ &")를 벗어날 필요가 있다는 것을 깨닫지 못했습니다. 도움을 주셔서 감사 드리며 피터에게도 감사드립니다. 내가 말했듯이 내가 정규식을 가진 뉴비이기 때문에 내가하는 일을 정말로 알지 못했다. 팁 주셔서 감사. – Meroon

0

RegExKitLite에 대한 경험이 없으며 & 문자 클래스 내에서 특별하게 발생하지 않았지만 그 전에 작동하는지 확인하기 전에 \을 입력 해보십시오.

NSLog(@"Array: %@", [message componentsMatchedByRegex:@"^(http://)[-a-zA-Z0-9+\&@#/%?=~_()|!:,.;]*"]); 
+0

아니요. 이전에 시도했지만 여전히 작동하지 않습니다. 플러스 xcode는 알려지지 않은 이스케이프 시퀀스라고 경고합니다. – Meroon