[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