답변:
메타 문자 \b
는 캐럿 및 달러 기호와 같은 앵커입니다. "word boundary" 라는 위치에서 일치 합니다. 이 일치는 길이가 0입니다.
단어 경계에 해당하는 세 가지 다른 위치가 있습니다.
간단히 말해 : 의 형식으로 정규식을 사용하여 "전체 단어 만" 검색 \b
을 수행 할 수 있습니다 . "단어 문자는" 단어를 형성하는 데 사용할 수있는 문자입니다. "단어 문자" 가 아닌 모든 문자는 "단어 이외 문자" 입니다.\bword\b
모든 맛에서 문자 [a-zA-Z0-9_]
는 단어 문자입니다. 이것들은 속기 문자 클래스와도 일치합니다 \w
. 풍미 비교에서 단어 경계에 대해 "아스키" 를 표시 하는 풍미는 이들을 단어 문자로만 인식합니다.
\w
"단어 문자"를 의미하며 일반적으로 [A-Za-z0-9_]
. 밑줄과 숫자가 포함되어 있습니다.
\B
의 부정 버전입니다 \b
. 그렇지 않은 \B
모든 위치에서 일치합니다 \b
. 효과적으로, \B
두 단어가 아닌 문자 사이의 모든 위치와 두 단어가 아닌 문자 사이의 모든 위치에서 일치합니다.
\W
[^\w]
의 부정 버전의 줄임말 입니다 \w
.
\w
단어 문자와 일치합니다. \b
한쪽에 단어 문자가 있고 다른쪽에 단어 문자가 아닌 위치 문자와 일치하는 너비가 0 인 일치 항목입니다. (단어가 아닌 것들의 예는 공백, 문자열의 시작과 끝 등을 포함합니다)
\w
성냥 a
, b
, c
, d
, e
, 및 f
의 "abc def"
\b
일치 (0부터 폭) 위치에 앞서 a
, 후에 c
, 이전 d
및 이후 f
의"abc def"
\b
폭이 0 인 주장; 문자 와 일치하지 않고 위치 와 일치합니다 .
@Mahender, 당신은 아마 \W
(와 \w
) 대신에 (의 ) 차이를 의미했을 것입니다 \b
. 그렇지 않다면 위의 @BoltClock 및 @jwismar에 동의합니다. 그렇지 않으면 계속 읽으십시오.
\W
단어가 아닌 문자와 일치하므로 단어 경계와 일치시키기 위해 쉽게 사용할 수 있습니다. 문제는 줄의 시작이나 끝과 일치하지 않는다는 것입니다. \b
줄의 시작 또는 끝과도 일치하므로 단어 경계를 일치시키는 데 더 적합합니다. 대략적으로 말하면 (보다 숙련 된 사용자가 나를 여기서 바로 잡을 \b
수 있음)이라고 생각할 수 있습니다 (\W|^|$)
. [편집 : @ Ωmega가 아래에 언급했듯이 \b
길이가 0 인 일치이므로 (\W|^|$)
엄격하게 정확하지는 않지만 diff를 설명하는 데 도움이됩니다.]
빠른 예 : 문자열의 경우 Hello World
, .+\W
일치합니다 Hello_
(공간에)하지만 일치하지 않습니다 World
. .+\b
모두 일치하는 것 Hello
등을 World
.
\b
와 같은 의미에 동의하지 않습니다 . 이 사실을 여기서 확인할 수 있습니다 => regexr.com/3qf98 . (\W|^|$)
(\W|^|$)
\b
나를 위해, (?<=\W|^|$)
패턴 이전과 패턴 (?=\W|^|$)
이후에 사용될 때 와 동일한 것을 의미합니다 . 내가 말하는 것을 확인할 수 있습니다 => regexr.com/3qf9h . \b
여기서 앵커 결과와 비교해 보십시오. => regexr.com/3qf9t
\b <= this is a word boundary.
단어 문자가 앞에 오지만 단어 문자가 앞에 오지 않는 위치 또는 단어 문자가 앞에 오지만 단어 문자가 앞에 오지 않는 위치에서 일치합니다.
\w <= stands for "word character".
항상 ASCII 문자 [A-Za-z0-9_]와 일치합니다.
일치 시키려고하는 것이 있습니까?
초보자 또는 식욕을 돋우는 데 유용한 일부 정규식 웹 사이트.
나는 이것이 매우 유용한 책임을 발견했다.
\w
항상 ASCII 문자와 동일하지는 않습니다. [A-Za-z0-9_]
영숫자 유니 코드 코드 포인트와 일치하며 로케일이 적절하게 설정된 경우 8 비트 ISO-Latin-1 문자와 일치 할 수 있습니다. .
\w
는 단어 문자 를\b
나타내고 , 단어 문자와 비 단어 문자 사이 의 단어 경계 를 나타냅니다 . 그들은 같은 것이 아닙니다.