2017-04-09 1 views
0

여러 문자열과 일치하는 정규 표현식에서 \ b의 사용을 이해 :탐색하는 동안 온라인 난 그냥 아래 정규식을 발견

(?:^|\b)(bitcoin atm|new text|bitcoin|test a|test)(?!\w) 

내가 여기 (?:^|\b)를 사용의 장점은 무엇인지 알고 그냥 궁금해서?

나는 기본적으로 (? :) 그것을 이해하지 못한다는 것을 이해하지만,이 특정한 괄호 안에 ^|\b에 의해 난처하게 처리되어있다. 여기서 나는 ^이 기본적으로 자산의 시작을 의미한다는 것을 이해한다. MDN\b

예는 나에게 \b가하는 일의 공정한 이해를했다,하지만 난 아직도 내가 제공 한 예에 따라 상황에 물건을 넣을 수 없습니다입니다. 누군가 제발 설명해 줄 수 있니?

감사합니다.

답변

2

(?:^|\b)은 두 가지 대안 (모두 너비가 아닌 어썰 티)을 포함하는 비 캡처 그룹입니다. 즉, 문자열의 위치와 일치하기 때문에 텍스트에 영향을주지 않습니다. 다음 서브 패턴이 최초의 비 캡처 그룹에 b, n 또는 첫 번째 문자로 t (A 단어 문자)를 \b (단어 경계) 일치로

게다가, 또한의 시작 부분에서 그들을 일치합니다 문자열, ^ (문자열 앵커의 시작) 대체 브랜치 중복 여기에 있습니다. 대안 여기에 단어를 문자로 끝나는 때문에

따라서, 안전하게

\b(bitcoin atm|new text|bitcoin|test a|test)(?!\w) 

심지어

\b(bitcoin atm|new text|bitcoin|test a|test)\b 

를 사용할 수 있습니다.

(bitcoin atm|new text|bitcoin|test a|test) 그룹의 대안이 사용자 정의, 동적이며, 시작 또는 비 단어 문자로 종료 할 수있는 경우는 다음 (?:^|\b)(?!\w) 정규식 패턴은 의미가 있지만, (?:^|\b)\.txt(?!\w)로, 다음 prcise되지 않을 것이다 전체 단어로 .txt과 일치하지 않으므로 char 다음에 단어가 와야합니다. (?:^|\b) 대신 (?:^|\W)을 사용합니다.

+0

비 캡처 그룹'(? :^| \ b)'에 대해 정확히'| '는 무엇입니까? –

+1

캡쳐 그룹과 동일 :'|'는 [alternation operator] (http://www.regular-expressions.info/alternation.html)입니다. 문자열 또는 단어 경계의 시작. –