iOS 개발 - 정규 표현 식 사용 과 일치 하 는 내용
사진 하나 찍 고 편 하 게 할 까요?
정규 일치 정수 와 부동 소수점
: , , :
3.2GB, 788MB, 6.7GB , 12GB.
3.2GB
788MB
6.7GB
12GB
우리 가 만약 에 첫눈 에 당신 이 어떻게 해 야 한다 고 생각 합 니까? 우리 가 오늘 원 하 는 것 은 일치 할 뿐만 아니 라 해당 하 는 수 치 를 얻 는 것 입 니 다. 이것 은 우리 가 사용 하 는 시스템
NSRegularExpression
과 일치 하고 내용 의 일치 도 해 야 합 니 다. 처음에 나 는 세 가지 규칙 을 생각 했 습 니 다. 다음 과 같 습 니 다.\\d*\\.\\d*[M|G]B
이런 규칙 은 소수점 이 함 유 된 수치 에 만 적합 하 다. 프로젝트 에서 사용 할 때 정수 가 일치 하지 않 는 것 을 발견 하고 아래 (((\\d*\\.\\d*)MB)|((\\d*\\.\\d*)GB))
이것 은 PHP 의 큰 소 가 쓴 것 입 니 다. 제 가 자세히 분 해 했 는데 제 가 쓴 것 만 있 으 면 되 는 것 같 지만 정수 에 맞 으 면 틀 립 니 다.(\\d*(\\.\\d*)?)[M|G]B
이것 이 야 말로 우리 가 원 하 는 것 이다. 소수 와 일치 할 수 있 고 정수 와 일치 할 수 있다. 이것 은 내 가 고려 한 후에 약간 수정 한 것 이다. 검 측 결 과 는 정상 적 인 것 이다 NSString *searchText = @" 3.2GB, 899MB, 5.8GB, 12GB";
NSError *error = NULL;
//@"\\d*\\.\\d*[M|G]B"
//@"(((\\d*\\.\\d*)MB)|((\\d*\\.\\d*)GB))"
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(\\d*(\\.\\d*)?)[M|G]B"
options:NSRegularExpressionCaseInsensitive error:&error];
NSTextCheckingResult *result = [regex firstMatchInString:searchText options:0 range:NSMakeRange(0, [searchText length])];
NSArray * matches1 = [regex matchesInString:searchText options:NSMatchingReportProgress range:NSMakeRange(0, [searchText length])];
for (NSTextCheckingResult * test in matches1) {
NSString *tagValuestr = [searchText substringWithRange:test.range];
NSLog(@"tagvalue = %@",tagValuestr);
}
if (result) {
NSLog(@"%@", [searchText substringWithRange:result.range]);
}
콘 솔 출력 결 과 는 다음 과 같 습 니 다.
2016-03-15 17:41:19.608 RegularExp[54814:2551313] tagvalue = 3.2GB
2016-03-15 17:41:19.608 RegularExp[54814:2551313] tagvalue = 899MB
2016-03-15 17:41:19.608 RegularExp[54814:2551313] tagvalue = 5.8GB
2016-03-15 17:41:19.608 RegularExp[54814:2551313] tagvalue = 12GB
2016-03-15 17:41:19.609 RegularExp[54814:2551313] 3.2GB
이것 이 바로 우리 가 원 하 는 결과
result
가 하나의 결과 이 고 사용 matches
은 여러 가지 결 과 를 얻 는 것 임 을 알 수 있다.URL 매개 변 수 를 가 져 오 는 정규 사항 을 다시 한 번 말씀 드 리 겠 습 니 다.
코드 는 다음 과 같 습 니 다:
NSError *error1;
NSString *regTags=[[NSString alloc] initWithFormat:@"(^|&|\\?)+%@=+([^&]*)(&|$)",@"adc"];
NSRegularExpression *regex1 = [NSRegularExpression regularExpressionWithPattern:regTags
options:NSRegularExpressionCaseInsensitive
error:&error1];
//
NSString *webaddress=@"http://www.baidu.com/dd/adb.htm?adc=e12&xx=lkw&dalsjd=12";
NSArray *matches = [regex1 matchesInString:webaddress
options:0
range:NSMakeRange(0, [webaddress length])];
for (NSTextCheckingResult *match in matches) {
//NSRange matchRange = [match range];
//NSString *tagString = [webaddress substringWithRange:matchRange]; //
// NSRange r1 = [match rangeAtIndex:1];
// if (!NSEqualRanges(r1, NSMakeRange(NSNotFound, 0))) { // 1 ,
// //NSString *tagName = [webaddress substringWithRange:r1]; // 1
// return @"";
// }
NSString *tagValue = [webaddress substringWithRange:[match rangeAtIndex:2]]; // 2
// NSLog(@" 2 :%@
",tagValue);
NSLog(@"tagvalue = %@",tagValue);
}
콘 솔 출력
2016-03-15 17:41:19.609 RegularExp[54814:2551313] tagvalue = e12
이상 은 NSRegularExpression 같은 종류 에 대한 사용 입 니 다.
다음은 실 용적 인 것 을 확장 합 니 다.
방법 1. 서술 어
NSPredicate
를 사용 하여 정규 표현 식 을 만 듭 니 다.일반적으로 저 희 는 서술 어 만 사용 하여 개발 자가 입력 한 문자열 이 합 법 적 인지 판단 할 수 있 을 뿐 다른 요구 가 없습니다.
// : ,
NSString *regex = @"^[a-z0-9A-Z]*$";
//
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
//
NSString *str = @"Hello100";
//
if ([predicate evaluateWithObject:str]) {
NSLog(@"Match");
}
위 에서 판단 한 결 과 는 Match 를 출력 하 는 것 입 니 다. 문자열 을 -, = 로 바 꾸 면!그런 판단 은 들 어가 지 않 는 다.
방법 2. NSRegularExpression 을 통 해 지정 한 대상 을 가 져 옵 니 다.
우 리 는 우리 가 원 하 는 결 과 를 얻 을 수 있 는 것 을 걸 러 낼 수 있 습 니 다. 코드 가 더욱 뚜렷 합 니 다.
NSString *url = @"[email protected]";
NSError *error;
// NSRegularExpression
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:@"[^@]*\\."
options:0
error:&error];
if (!error) { //
//
NSTextCheckingResult *match = [regex firstMatchInString:url
options:0
range:NSMakeRange(0, [url length])];
if (match) {
//
NSString *result = [url substringWithRange:match.range];
NSLog(@"%@",result);
}
} else { // ,
NSLog(@"error - %@", error);
}
위 에 있 는 이 열 은 특정한 문자열 에서 '@' 으로 시작 하 는 구간 문자열 을 검색 하기 때문에 최종 적 으로 얻 은 문자열 의 끝 은 점 '을 포함 하고 최종 적 으로 출력 하 는 것 은' 163. '입 니 다.
방법 3. NSRegular Expression 은 여러 가지 결 과 를 얻 을 수 있 습 니 다. 즉, 맨 위 에 있 는 우리 의 수요 입 니 다.
우 리 는 연속 적 인 숫자 서열 을 얻 는 정규 를 설명 한다
NSString *regex = @"\\-\\d*\\.";
NSString *str = @"-111.-666.-888.";
NSError *error;
NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:regex
options:NSRegularExpressionCaseInsensitive
error:&error];
// str
NSArray *matches = [regular matchesInString:str
options:0
range:NSMakeRange(0, str.length)];
//
for (NSTextCheckingResult *match in matches) {
NSRange range = [match range];
NSString *mStr = [str substringWithRange:range];
NSLog(@"%@", mStr);
}
@"\\-\\d*\\.";
우리 가 있 는 이곳 의 규칙 은 - 번호 시작, \ 는 특수 문자 의 전 의 를 대표 하고 일치 에 참여 하지 않 습 니 다. "\ d" 는 [0 - 9] 에 해당 하 며 \ \ 시작 하 는 규칙 이 있 습 니 다. 전의 문 자 를 넣 어야 합 니 다. "방법 3 의 출력 결 과 는?-111.
-666.
-888.
인쇄 결 과 를 통 해 우 리 는 방법 3 의 결과 가 여러 개 라 는 것 을 알 수 있 고 우리 가 원 하 는 결 과 를 얻 을 수 있다.
주석: 자주 사용 하 는 문 자 를 주석 합 니 다.
“\” : 、 、 , 。 :“\
” “
” "
"。 “\\” “\” “\(” “(”
。 "^": , RegExp Multiline ,^ “
” “\r” 。
"$" : 。 RegExp Multiline ,$ “
” “\r” 。
"*": ( 0 )。 ,zo* “z”,“zo” “zoo”。* {0,}。
"+": ( 1 )。 ,“zo+” “zo” “zoo”, “z”。+ {1,}。
"?": 。 ,“do(es)?” “do” “does” “do”。? {0,1}。
"{n}":n 。 n 。 ,“o{2}” “Bob” “o”, “food” o。
"{n,}":n 。 n 。 ,“o{2,}” “Bob” “o”, “foooood” o。“o{1,}” “o+”。“o{0,}” “o*”。
"{n,m}":m n , n<=m。 n m 。 ,“o{1,3}” “fooooood” o。“o{0,1}” “o?”。 。
"?": (*,+,?,{n},{n,},{n,m}) , 。 , 。 , “oooo”,“o+?” “o”, “o+” “o”。
".": “\r
” 。 “\r
” , “[\s\S]” 。
"\s" :" , 、 、 。 [ \f
\r\t\v]。"
바로 여기까지 입 니 다. 링크 를 보십시오. 정규 사용 설명
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.