단어 경계에 대해 혼란스러워함

단어 경계에 대해 혼란스러워함

나는 이것에 대해 많은 연구를 해왔지만 아직도 모릅니다. 무엇인가요단어 경계의미는? 그것은 무엇을 합니까?

예를 들어, 누군가 나에게 이 명령을 설명해 줄 수 있나요?

egrep '\b[A-Z]+\b' filename.sh

답변1

상술 한 바와 같이여기, 예를 들어 다음과 일치합니다.~ 사이성격:

세 가지 다른 위치가 단어 경계 역할을 할 수 있습니다.

  1. 첫 번째 문자가 단어 문자인 경우 문자열의 첫 번째 문자 앞입니다.
  2. 문자열의 마지막 문자 뒤, 마지막 문자가 단어 문자인 경우.
  3. 문자열의 두 문자 사이. 그 중 하나는 단어 문자이고 다른 하나는 단어 문자가 아닙니다.

각 상황의 예는 다음과 같습니다.

  1. 문자열의 경우 foobar첫 번째 사례가 일치합니다.

     foobar
    ^-----here
    
  2. 문자열의 경우 foobar두 번째 사례가 일치합니다.

    foobar
          ^--here
    
  3. 문자열의 경우 foo bar세 번째 사례가 일치합니다.

    foo bar
       ^--here, because space is not a word character
    

단어 문자의 자격은 특정 정규식 구현에 따라 다릅니다. 그러나 모든 경우에 문자( [a-z][A-Z]), 숫자( [0-9]) 및 _은 단어 문자로 간주됩니다.


따라서 귀하가 게시한 예제 정규식( \b[A-Z]+\b)은 두 단어 경계 사이에 있고 대문자만 포함하는 가장 긴 문자열을 찾기 위한 것입니다. 예를 들어 설명하는 것이 더 쉬울 수 있습니다.

echo "FOOBAR" | egrep '\b[A-Z]+\b'   # Works
echo "FOO BAR" | egrep '\b[A-Z]+\b'  # Works
echo "aFOOBARb" | egrep '\b[A-Z]+\b' # Does not work, we want capitals only
echo "12345" | egrep '\b[A-Za]+\b'   # Does not work, no letters
echo "1FOOBAR2" | egrep '\b[A-Z]+\b' # Does not work, 1 and 2 are word chars
echo "_FOOBAR_" | egrep '\b[A-Z]+\b' # Does not work, _ is a word char
echo "#FOOBAR$" | egrep '\b[A-Z]+\b' # Works, # and $ are not word chars

답변2

egrep '\b[A-Z]+\b' filename.sh

그것을 분석해 봅시다:

  1. [A-Z]문자 클래스의 모든 문자를 나타냅니다 [ABCDEFGHIJKLMNOPQRSTUVWXYZ].
  2. [A-Z]+하나 이상의 대문자 발생을 나타냅니다. 일치 항목의 예는 다음 과 같습니다: A, HELLO, IS, 등.IELEPHANT
  3. '\bINDIA\b'INDIA: 대문자 단어에 대한 전체 단어 검색과 정확히 동일합니다. 그럴 것이다아니요성냥 INDIANA. 따라서 동일한 원칙이 적용됩니다. '\b[A-Z]+\b'하나 이상의 대문자가 포함된 전체 단어가 검색됩니다.
  4. 따라서 egrep '\b[A-Z]+\b' filename.sh파일에서 하나 이상의 대문자 - 가 포함된 단어를 검색합니다 filename.sh.

\b- 전체 단어 검색과 똑같습니다.

관련 정보