티스토리 뷰

iOS

iOS ) NSRegularExpression.Options

Zedd0202 2018. 3. 31. 20:22
반응형

안녕하세요 :) Zedd입니다.

오늘은.. NSRegularExpression.Options을 공부해봅시다.

?저번에 Options뭐 글 쓰지 않았나효,,

그건 String의 compareOptions!!!! 보실 분들은 <NSString.CompareOptions종류>글을 참고해주세요.


이번거는 이름에서 볼 수 있듯이...NSRegularExpression.Options .NSRegularExpression에서 사용하는 옵션입니다.



let regex = try NSRegularExpression(pattern: regex, options: [])



바로 저기 bold체 해놓은 곳에 들어가는 옵션이죠.




옵션들에는 이정도가 있습니다.

하나씩 보죠.


NSRegularExpression.Options



●  caseInsensitive


<NSString.CompareOptions종류>글과 완벽히 같습니다.

설명은 안할게용


●  allowCommentsAndWhitespace

정의는 Ignore whitespace and #-prefixed comments in the pattern.

패턴에 공백과 #가 붙은 주석을 무시하십시오.

인데요...

ㅠㅠㅠ..이게 언제 되는지 도대체 뭐라해야되지 아 이때 ㄱ딱 되네!! 이걸 모르겠습니다.


myLabel.text = "hello, zedd. Zedd hava a zeddyzedd!"

let regex = try NSRegularExpression(pattern: "zedd", options: [.allowCommentsAndWhitespace])


자..패턴으로 zedd를 주고, (엥 저거 정규식 아니잖아;;라고 하실 수도 있는데..! 이렇게 검사도 됩니다. 저런식으로 패턴에 string을 넘겨주면, 해당 string을 체크해요!)


그럼 이렇게 되죠. 현재 옵션을 allowCommentsAndWhitespace로 준상태지만, 저 옵션을 주지 않아도 위 결과가 나오게 됩니다.


그럼 allowCommentsAndWhitespace는 뭐냐;;;

저는  Ignore whitespace and #-prefixed comments in the pattern.이걸 보고, 

아 #zedd는 zedd로 인식하나보지?

여러분 지금부터 allowCommentsAndWhitespace에 대한 여러가지 실험 결과를 쓸건데, 

헷갈릴 수도 있으니(지금 제가 헷갈림;;;) 주의해서 봐주세요.


Case 1 : 패턴에 prefix로 #이 있을 경우


1-1 : 옵션에 allowCommentsAndWhitespace가 없을 경우.


myLabel.text = "hello, #zedd. Zedd hava a zeddyzedd z edd!"

let regex = try NSRegularExpression(pattern: "#zedd", options: [])


이 결과는 당연하죠?

1 -2 : 옵션에 allowCommentsAndWhitespace가 있을 경우.


myLabel.text = "hello, #zedd. Zedd hava a zeddyzedd z edd!"

let regex = try NSRegularExpression(pattern: "#zedd", options: [])

#zedd마저 활성화가 안된다. 여기서 내 의문.

정의는 분명히 패턴에 #prefix를 무시한다고 했는데, 그럼 zedd로 패턴이 들어가는거나 마찬가지 아닌가? -> 왜 다른 zedd들은 파란색으로 바뀌지 않은것인가?


(여러분 근데 제가 정의를 잘못이해하고 있을 수도 있습니다..혹시나 아시는 분은 댓글로 알려주시면 정말 감사하겠습니다.)



Case 2 : 패턴에 WhiteSpace가 있는 경우.


2-1 : 옵션에 allowCommentsAndWhitespace가 없을 경우.


myLabel.text = "hello, #zedd. Zedd hava a zeddyzedd z edd!"

let regex = try NSRegularExpression(pattern: "z edd", options: [])



2- 2 : 옵션에 allowCommentsAndWhitespace가 있는 경우.


myLabel.text = "hello, #zedd. Zedd hava a zeddyzedd z edd!"

let regex = try NSRegularExpression(pattern: "z edd", options: [.allowCommentsAndWhitespace])



그러면 이제 정의대로 잘 동작한거죠. #prefix때와는 다르게 말이에요...지금 패턴이 "z edd"잖아요? 나는 이게 "z edd"든 뭐든 안에 whiteSpace를 무시하고 인식하겠다 이거잖아요. 그래서 지금 결과가 zedd는 모두 파란색이 됐죠.

하지만 #Prefix때는 아무것도 파란색으로 변하지 않으니까...그게 헷갈립니다...



myLabel.text = "hello, #zedd. Zedd hava a zeddyzedd z edd!"

let regex = try NSRegularExpression(pattern:"z e   d   d    ", options: [.allowCommentsAndWhitespace])



만약 패턴이 저렇게 극단적으로 whiteSpace가 많아도


이렇게 whiteSpace를 무시하고, zedd를 잘 인식합니다.


Case2에 대해 한가지  더 추가하자면, #과 whiteSpace가 패턴에 존재하고, allowCommentsAndWhitespace가 추가된 경우.

아무것도 바뀌지 않습니다..


Case 3 : 패턴 중간에 #이 있는경우



myLabel.text = "hello, #zedd. Zedd hava a zeddyzedd z edd!"

let regex = try NSRegularExpression(pattern:"z e#   d   d    ", options: [.allowCommentsAndWhitespace])



3-1 : 옵션에 allowCommentsAndWhitespace가 없을 경우. 


3-2 : 옵션에 allowCommentsAndWhitespace가 없을 경우. 



ㅠㅠㅠ..뭐지......이거 솔직히 헷갈릴만 하다...아니 찾아도 뭔 예제도 없고..그래서...혼자 여러가지 실험해봤는데..이거 말고 진짜 정규식 /^~~$ <- 이런거에서는 잘 동작하는건가? 내가 원래 text가 이상한것인가?!??!?!


아무튼...아는분은 알려주시면 감사하겠습니다...


●  ignoreMetacharacters

Treat the entire pattern as a literal string.


전체 패턴을 리터럴 문자열로 취급합니다.


ignoreMetacharacters옵션이 없는 경우.


myLabel.text = "hello, #zedd. ()Zedd hava a zeddyzedd z edd!"

let regex = try NSRegularExpression(pattern:"()", options: [])




ignoreMetacharacters옵션이 있는 경우.


myLabel.text = "hello, #zedd. ()Zedd hava a zeddyzedd z edd!"

let regex = try NSRegularExpression(pattern:"()", options: [.ignoreMetacharacters])




●  dotMatchesLineSeparators

Allow . to match any character, including line separators.

. 행 구분 기호를 포함하여 모든 문자와 일치시킵니다..?


dotMatchesLineSeparators옵션을 추가 안한경우.

myLabel.text = "hello, #zedd. ()Zedd hava a zeddy zedd\nzedd!"

let regex = try NSRegularExpression(pattern:"zedd.zedd", options: [])






dotMatchesLineSeparators옵션을 추가 한경우.

myLabel.text = "hello, #zedd. ()Zedd hava a zeddy zedd\nzedd!"

let regex = try NSRegularExpression(pattern:"zedd.zedd", options: [.dotMatchesLineSeparators])




● anchorsMatchLines

Allow ^ and $ to match the start and end of lines.
줄의 시작과 끝을 ^ 및 $로 일치시킵니다.

anchorsMatchLines옵션을 추가 안한경우.

myLabel.text = "hello, \nzedd. ()Zedd hava a zeddy zedd\nzedd!"

let regex = try NSRegularExpression(pattern:"^zedd", options: [])



anchorsMatchLines옵션을 추가 한경우.

myLabel.text = "hello, \nzedd. ()Zedd hava a zeddy zedd\nzedd!"

let regex = try NSRegularExpression(pattern:"^zedd", options: [.anchorsMatchLines])



● useUnixLineSeparators

Treat only \n as a line separator (otherwise, all standard line separators are used).


줄 구분 기호로 \ n 만 처리하십시오 (그렇지 않으면 모든 표준 줄 구분 기호가 사용됩니다).


이거 별짓을 다해봤늗네..잘 모르겠어요..ㅠㅠㅠ하



 useUnicodeWordBoundaries

유니 코드 TR # 29를 사용하여 단어 경계를 지정하십시오 (그렇지 않으면 기존의 정규 표현식 단어 경계가 사용됨).
이것도 모르겠음..와..진짜...ㅠㅠㅠ 무슨 하나도 쓴 예제가 없네요..아니 내가 지금 /^[]$뭐 이런 정규식을 안써서 이런건지.......








반응형