84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
当我使用正则表达式的时候发现了很诡异的现象,如下:
[--\ˇ]
[_-\ˇ]
[=-\ˇ]
就是第一个不能匹配字母,第二个能匹配字母,第三个能匹配字母和斜杠
我只是希望在字符串里出现这几个特殊字符就替换,没想到连字母都替换了,我知道能用其他写法实现此需求,但我就是不知道这样写为什么会这么诡异,大神们解释下这个正则。
卧槽还有这几个,写个正则这么费劲儿
[+-~]
[i-~]
[--~]
[_-~]
[=-~]
...
感兴趣就和hello w\o\r\l\d匹配测试一下。
hello w\o\r\l\d
闭关修行中......
우선 첫 번째 예시는 법적 단골이 아니어서 결과가 나오지 않습니다.
다음 두 예제의 정규식은 가장 기본적인 [a-z] 구문입니다. 즉, 한 문자의 모든 문자를 다른 문자 인코딩과 일치시키는 것을 의미합니다. [a-z] 语法,表示匹配从一个字符到另一个字符编码之间的所有字符。
[a-z]
两例子中,起始字符分别是 _、=, 终止字符都是全角符号 ˇ。全角符号编码大于所有 ASCII 编码,所有在匹配 AscII 编码时都匹配,不用多考虑,我们查下起始字符的 ASCII 编码。
_
=
ˇ
ASCII 编码中:/ < 0-9 < = < A-Z < < _ < a-z
/
0-9
A-Z
a-z
所以, [=-ˇ] 能匹配大写字母、反斜杠、小写字母,[_-ˇ]
[=-ˇ]
[_-ˇ]
ß
ASCII 인코딩: / 0-9 = 코드> < _ a-z
코드>
[=- ]
[_- ]
우선 첫 번째 예시는 법적 단골이 아니어서 결과가 나오지 않습니다.
다음 두 예제의 정규식은 가장 기본적인
[a-z]
구문입니다. 즉, 한 문자의 모든 문자를 다른 문자 인코딩과 일치시키는 것을 의미합니다.[a-z]
语法,表示匹配从一个字符到另一个字符编码之间的所有字符。两例子中,起始字符分别是
_
、=
, 终止字符都是全角符号ˇ
。全角符号编码大于所有 ASCII 编码,所有在匹配 AscII 编码时都匹配,不用多考虑,我们查下起始字符的 ASCII 编码。
ASCII 编码中:
/
<0-9
<=
<A-Z
<<
_
<a-z
所以,
두 가지 예에서 시작 문자는[=-ˇ]
能匹配大写字母、反斜杠、小写字母,[_-ˇ]
_
및=
이고 끝 문자는 모두 전자 기호ß
입니다.전폭 기호 인코딩은 모든 ASCII 인코딩보다 크며 AscII 인코딩과 일치할 때 모두 일치합니다. 너무 많이 생각하지 않고 시작 문자의 ASCII 인코딩을 확인합니다.
ASCII 인코딩:
🎜그래서/
0-9
=
코드>
<_
a-z
[=- ]
는 대문자, 백슬래시, 소문자와 일치할 수 있고[_- ]
는 소문자만 일치할 수 있으며 둘 다 일치할 수 없습니다. 슬래시와 숫자가 일치합니다. 🎜 🎜 🎜둘째, 이렇게 이상한 정규 표현식은 유지 관리가 어렵기 때문에 작성하지 않는 것이 좋습니다. 🎜