[regex] 정규식 : “문자열의 공백 또는 시작”및 “문자열의 공백 또는 끝”지정

“stackoverflow”와 패턴 일치를 시도한다고 가정하십시오.

다음을 원합니다 :

 this is stackoverflow and it rocks [MATCH]

 stackoverflow is the best [MATCH]

 i love stackoverflow [MATCH]

 typostackoverflow rules [NO MATCH]

 i love stackoverflowtypo [NO MATCH]

다음을 사용하여 두 사이트에 공백이있는 경우 stackoverflow를 구문 분석하는 방법을 알고 있습니다.

/\s(stackoverflow)\s/

문자열의 시작 또는 끝에있는 경우와 동일합니다.

/^(stackoverflow)\s/

/\s(stackoverflow)$/

그러나 정규 표현식을 사용하여 “문자열 또는 공백”과 “문자열 또는 공백”을 어떻게 지정합니까?



답변

다음 중 하나를 사용할 수 있습니다.

\b      #A word break and will work for both spaces and end of lines.
(^|\s)  #the | means or. () is a capturing group. 


/\b(stackoverflow)\b/

또한 경기에 공백을 포함하지 않으려면 lookbehind / aheads를 사용할 수 있습니다.

(?<=\s|^)         #to look behind the match
(stackoverflow)   #the string you want. () optional
(?=\s|$)          #to look ahead.


답변

(^|\s)공백 또는 문자열 시작 및 ($|\s)공백 또는 문자열 끝 과 일치 합니다. 함께하면 :

(^|\s)stackoverflow($|\s)


답변

내가 사용하는 것은 다음과 같습니다.

 (?<!\S)stackoverflow(?!\S)

가되어 있지 않은 경우 즉, “유래”와 일치 앞에 공백이 아닌 문자가 아니라 다음에 공백이 아닌 문자로.

이것은 “space-or-anchor”접근 방식보다 깔끔한 (IMO) 접근 방식과 마찬가지로 문자열이 단어 문자로 시작하고 끝나는 것으로 가정 \b하지 않습니다.


답변

\b 실제로 단어와 일치하지 않고 단어 경계에서 일치하므로 다음을 수행하십시오.

\bstackoverflow\b


답변