/[A-z]/는 대소문자를 구분하지 않는 정규식에서 작동합니까?
/[A-z]/
Just to make sure it's crystal clear, that's a range from uppercase
A
to lowercasez
.
나는 이것이 작업을 수행하는 훌륭하고 간결한 방법이라고 생각했지만 그것이 내가 생각했던 대로 되지 않는다는 것을 깨닫게 되었습니다.
/[A-z]/ 관련 문제
처음에는 이것이 괜찮을 것이라고 생각했지만 사용했을 때 예상치 못한 결과를 얻었습니다. 다음은 내가 보기 시작한 것을 보여주는 Rubular의 스크린샷입니다.
이 표현식은 성공적으로 소문자와 대문자를 찾고 있지만 몇 가지 추가 기호도 잡아야 합니다. 이것은 어디에서 오는가?
ASCII table 을 살펴보면 대문자 알파벳 문자는 코드 65 ~ 90이고 소문자 알파벳 문자는 코드 97 ~ 122입니다. 두 문자 집합 사이에 6개의 추가 문자가 있습니다. ! 다음은 6개의 문자와 그 10진수 코드를 보여주는 표의 일부입니다.
문자 코드
성격
...
...
88
X
89
Y
90
Z
91
[
92
\
93
]
94
^
95
_
96
`
97
a
98
b
99
c
...
...
이러한 추가 기호 때문에 속기라고 생각했던 것이 완전히 다른 표현이었습니다.
이 표현:
/[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.
마무리
이 문제를 접하게 되어 기쁩니다. 그것은 훌륭한 학습 경험이었고 정규식의 범위가 어떻게 작동하는지 보는 데 도움이 되었습니다. 앞으로 누군가가 이 문제를 접할 경우를 대비하여 여기에 공유하는 것이 좋을 것이라고 생각했습니다. 바라건대 이것은 누군가에게 도움이됩니다!
읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(/[A-z]/는 대소문자를 구분하지 않는 정규식에서 작동합니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fitzgeraldkd/does-a-z-work-for-case-insensitive-regex-47fn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)