[regex] 정규식에서 \ b와 \ B의 차이점

정규 표현식에 대한 책을 읽고 있는데 다음 예제를 보았습니다 \b.

고양이는 방 전체에 음식을 뿌렸다.

정규식 사용- \bcat\b단어는 일치 cat하지만 catin 은 일치 하지 않습니다 scattered.

들어 \B저자 다음 예제를 사용합니다 :

9 자리 ID를 그대로 입력하세요.

색상으로 구분 된 패스 키에 표시됩니다.

단어 사이에 정규식 \B-\B일치 -를 사용합니다 color - coded. \b-\b반면에를 사용 하면 -in nine-digitpass-key.

우리 \b가 분리 하기 위해 사용하는 첫 번째 예 cat\B분리 하기 위해 두 번째 사용 하는 이유는 -무엇입니까? \b두 번째 예제에서 사용하면 이전에 수행 한 것과 반대입니다.

저에게 차이점을 설명 해주세요.

편집 : 또한 누구든지 새로운 예를 들어 설명해 주시겠습니까?



답변

혼란은 당신의 생각이 \b공백과 일치하기 때문에 발생합니다 (아마 “b”는 “공백”을 의미하기 때문일 것입니다).

\b단어시작 또는 끝에 있는 빈 문자열과 일치합니다 . \B단어의 시작이나 끝이 아닌 빈 문자열과 일치합니다. 여기서 핵심은 “-“가 단어의 일부가 아니라는 것입니다. 의 양쪽에 단어 경계가 있기 때문에 <left>-<right>일치 \b-\b합니다 -. 반면에 <left> - <right>(공백에 유의하십시오) 대시의 양쪽에 단어 경계가 없습니다. 단어 경계는 왼쪽과 오른쪽에 한 칸 더 있습니다.

반면에 \bcat\b단어 경계를 검색 할 때보다 직관적으로 동작하고 예상대로 “cat”과 일치합니다.


답변

\b너비가 0 인 단어 경계입니다. 구체적으로 특별히:

단어 문자 (\ w와 일치하는 모든 항목)와 비 단어 문자 ([^ \ w] 또는 \ W와 일치하는 항목) 사이의 위치 및 첫 번째 문자열 인 경우 문자열의 시작 및 / 또는 끝에서 일치합니다. 및 / 또는 문자열의 마지막 문자는 단어 문자입니다.

예 : .\b일치 cabc

\B너비가 0 인 단어가 아닌 경계입니다. 구체적으로 특별히:

두 단어 문자 사이의 위치 (예 : \ w \ w 사이의 위치)와 두 단어가 아닌 문자 사이의 위치 (예 : \ W \ W)에서 일치합니다.

예 : \B.\B일치 babc

더 좋은 정규식 정보는 regular-expressions.info 를 참조하십시오.


답변

다른 예 :

검색 할 문자열과 패턴이 ‘cat’인 것을 고려하십시오.

text = "catmania thiscat thiscatmaina";

이제 정의,

‘\ b’ 는 각 단어의 시작 또는 끝에서 패턴을 찾고 일치시킵니다.

‘\ B’ 는 각 단어의 시작 또는 끝에서 패턴을 찾거나 일치하지 않습니다.

다른 경우 :

사례 1 : 각 단어의 시작 부분

result = text.replace(/\bcat/g, "ct");

이제 결과는 “ctmania thiscat thiscatmaina”입니다.

사례 2 : 각 단어의 끝

result = text.replace(/cat\b/g, "ct");

이제 결과는 “catmania thisct thiscatmaina”입니다.

사례 3 : 처음에는 아님

result = text.replace(/\Bcat/g, "ct");

이제 결과는 “catmania thisct thisctmaina”입니다.

사례 4 : 끝이 아님

result = text.replace(/cat\B/g, "ct");

이제 결과는 “ctmania thiscat thisctmaina”입니다.

사례 5 : 시작도 끝도 아님

result = text.replace(/\Bcat\B/g, "ct");

이제 결과는 “catmania thiscat thisctmaina”입니다.

도움이 되었기를 바랍니다 🙂


답변

메타 문자 \ b는 캐럿 및 달러 기호와 같은 앵커입니다. “단어 경계”라고하는 위치에서 일치합니다. 이 일치는 길이가 0입니다.

단어 경계에 해당하는 세 가지 위치가 있습니다.

  • 첫 번째 문자가 단어 문자 인 경우 문자열의 첫 번째 문자 앞.
  • 문자열의 마지막 문자 뒤, 마지막 문자가 단어 문자 인 경우.
  • 하나는 단어 문자이고 다른 하나는 단어 문자가 아닌 문자열의 두 문자 사이.

\ B는 \ b의 부정 된 버전입니다 . \ B는 \ b가 아닌 모든 위치에서 일치합니다. 사실상 \ B는 두 단어 문자 사이의 모든 위치와 두 단어가 아닌 문자 사이의 모든 위치에서 일치합니다.

출처 : http://www.regular-expressions.info/wordboundaries.html


답변

\b단어 경계와 일치합니다. \B비 단어 경계와 일치하며 ( 수정 을 위해 @Alan Moore 에게 감사드립니다 !)와 동일 합니다. 둘 다 너비0입니다.[^\b](?!\b)

자세한 내용은 http://www.regular-expressions.info/wordboundaries.html 을 참조하십시오. 이 사이트는 많은 기본 정규식 질문에 매우 유용합니다.


답변

다음과 같은 문자열을 사용하십시오.

XIX IXI XX XI II IIXX XXII II XX -X X- XI IX -X- -IX -XI IX- XI- X_X _X-

참고 :이 경우 밑줄 (_)은 특수 문자로 간주되지 않습니다.

  1. /\bX\b/g 특수 문자 또는 공백으로 시작하고 끝나야합니다.

XIX IXI XX X I II IIXX XXII II XX X XX -I I- XX – -I- XX -I I- XX -I- X_X _X-


  1. /\bX/g 특수 문자 또는 공백으로 시작해야합니다.

X IX IXI X X X I II IIXX X XII II XXX XX -I IX – X – -I- XX -I IX – X -I- X _X _X-


  1. /X\b/g 특수 문자 또는 공백으로 끝나야합니다.

XI X IXI X X X I II IIX X XXII II XXX XX -I I- XX – -I- XX -I I- XX -I- X_ X _ X


  1. /\BX\B/g
    해야 하지 시작 하지 특수 문자 나 공백으로 종료

XIX I X I XX XI II II X X X X II II XX -X X- XI IX -X- -IX -XI IX- XI- X_X _X-


  1. /\BX/g해야 하지 특수 문자 나 공백으로 시작

XI XX 나 X X XI II II XX X X II II XX -X X- XI IX -X- -ix -xi IX- XI- X_ X _ X


  1. /X\B/g특수 문자 또는 공백으로 끝나서 는 안됩니다.

X IX I X I X X XI II II X X XX II II XX -X X- XI IX -X- -IX -XI IX- XI- X _X _X-


  1. /\bX\B/g특수 문자 또는 공백으로 시작하고 끝나지 않아야 합니다.

X IX IXI X X XI II II X X X XII II XX -X X- XI IX -X- -IX -XI IX- XI- X _X _X-


  1. /\BX\b/g해야 하지 시작하고 특수 문자 나 공백으로 끝나야합니다

XI X IXI X X XI II IIX X XXII II XX -X X- XI IX -X- -ix -xi IX- XI- X_ X _ X


답변

출처 © 저작권 RexEgg.com

단어 경계 : \ b *

단어 경계 \ b는 한 쪽이 단어 문자 (일반적으로 문자, 숫자 또는 밑줄이지만 엔진 간의 변형은 아래 참조)이고 다른 쪽은 단어 문자가 아닌 위치와 일치합니다 (예 : 문자열 또는 공백 문자).

따라서 정규식 \ bcat \ b는 검은 고양이의 고양이와 일치하지만 catatonic, tomcat 또는 인증서에서는 일치하지 않습니다. 경계 중 하나를 제거하면 \ bcat은 catfish의 cat과 일치하고 cat \ b는 tomcat의 cat과 일치하지만 그 반대는 아닙니다. 물론 둘 다 자체적으로 고양이와 일치합니다.

단어 경계가 아님 : \ B

\ B는 \ b가 일치하지 않는 모든 위치와 일치합니다. 따라서 다음과 일치합니다.

✽ 어느 쪽도 단어 문자가 아닌 경우, 예를 들어 문자열 $ = (@-% ++) (문자열의 시작과 끝 포함)의 임의 위치

✽ 양쪽이 단어 문자 인 경우 (예 : Hi!에서 H와 i 사이)

이것은 그다지 유용하지 않은 것 같지만 때때로 \ B가 원하는 것입니다. 예를 들어

✽ \ Bcat \ B는 인증서에서와 같이 단어 문자로 완전히 둘러싸인 고양이를 찾지 만 그 자체로도, 단어의 시작이나 끝에서도 찾을 수 없습니다.

✽ cat \ B는 인증서와 메기 모두에서 고양이를 찾을 수 있지만 바람둥이에서나 자체적으로 고양이를 찾을 수 없습니다.

✽ \ Bcat은 인증서와 바람둥이 둘 다에서 고양이를 찾지 만 메기 나 그 자체로는 찾을 수 없습니다.

✽ \ Bcat | cat \ B는 인증서, 메기 또는 바람둥이와 같은 내장 된 상황에서 고양이를 찾지 만 그 자체로는 찾을 수 없습니다.