/[A-z]/는 대소문자를 구분하지 않는 정규식에서 작동합니까?

2924 단어 regexbeginners
얼마 전에 다음과 같은 대소문자를 구분하지 않는 문자를 찾기 위해 온라인에서 한 가지 예를 본 것을 기억합니다.

/[A-z]/


Just to make sure it's crystal clear, that's a range from uppercase A to lowercase z.



나는 이것이 작업을 수행하는 훌륭하고 간결한 방법이라고 생각했지만 그것이 내가 생각했던 대로 되지 않는다는 것을 깨닫게 되었습니다.

/[A-z]/ 관련 문제



처음에는 이것이 괜찮을 것이라고 생각했지만 사용했을 때 예상치 못한 결과를 얻었습니다. 다음은 내가 보기 시작한 것을 보여주는 Rubular의 스크린샷입니다.



이 표현식은 성공적으로 소문자와 대문자를 찾고 있지만 몇 가지 추가 기호도 잡아야 합니다. 이것은 어디에서 오는가?

ASCII table 을 살펴보면 대문자 알파벳 문자는 코드 65 ~ 90이고 소문자 알파벳 문자는 코드 97 ~ 122입니다. 두 문자 집합 사이에 6개의 추가 문자가 있습니다. ! 다음은 6개의 문자와 그 10진수 코드를 보여주는 표의 일부입니다.


문자 코드
성격


...
...

88X
89Y
90Z
91[
92\
93]
94^
95_
96`
97a
98b
99c
...
...


이러한 추가 기호 때문에 속기라고 생각했던 것이 완전히 다른 표현이었습니다.

이 표현:

/[A-z]/


실제로 다음과 같이 평가됩니다.

/[A-Z\[\\\]^_`a-z]/


이제 표현이 의도한 대로 작동하지 않는 이유가 훨씬 더 명확해졌습니다!

대신 사용할 것



전체 정규식이 대소문자를 구분하지 않을 수 있는 경우 가장 쉬운 방법은 대소문자를 구분하지 않는 수정자i를 사용하는 것입니다.

/[a-z]/i


표현식의 특정 부분만 대소문자를 구분하지 않는 경우 몇 가지 옵션이 있습니다. 예를 들어, 첫 번째와 마지막 문자는 소문자이지만 중간 문자는 대문자나 소문자일 수 있는 3자 문자 전용 문자열을 찾고 있다고 가정해 보겠습니다. 우리는 그것을 어떻게 쓸까요?

한 가지 옵션은 다음과 같습니다.

/[a-z][a-zA-Z][a-z]/


이를 수행하는 또 다른 방법은 표현식으로 specify modes inline을 사용하는 것입니다. 이를 통해 rexpression의 일부에 대해 대소문자를 구분하지 않는 모드를 켤 수 있습니다. 다음과 같이 보일 수 있습니다.

/[a-z](?i)[a-z](?-i)[a-z]/


Note: Specifying these modes inline may not work for all programming languages.



마무리



이 문제를 접하게 되어 기쁩니다. 그것은 훌륭한 학습 경험이었고 정규식의 범위가 어떻게 작동하는지 보는 데 도움이 되었습니다. 앞으로 누군가가 이 문제를 접할 경우를 대비하여 여기에 공유하는 것이 좋을 것이라고 생각했습니다. 바라건대 이것은 누군가에게 도움이됩니다!

읽어 주셔서 감사합니다!

좋은 웹페이지 즐겨찾기