Confuso sobre limite de palavra

12

Eu tenho pesquisado muito isso, mas ainda não estou claro sobre isso. O que significa limite de palavras ? O que isso faz?

Então, por exemplo, alguém poderia me explicar esse comando, por favor?

egrep '\b[A-Z]+\b' filename.sh
    
por user36683 07.04.2013 / 03:05

2 respostas

11

Conforme descrito aqui , por exemplo, ele corresponde a entre palavras:

There are three different positions that qualify as word boundaries:

  1. Before the first character in the string, if the first character is a word character.
  2. After the last character in the string, if the last character is a word character.
  3. Between two characters in the string, where one is a word character and the other is not a word character.

Aqui estão alguns exemplos de cada um desses casos:

  1. Para a string foobar , o primeiro caso corresponde a

     foobar
    ^-----here
    
  2. Para a string foobar , o segundo caso corresponde a

    foobar
          ^--here
    
  3. Para a string foo bar , o terceiro caso será igual a

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

O que se qualifica como um caractere de palavra depende da implementação da expressão regular específica. Em todos os casos, no entanto, letras ( [a-z] e [A-Z] ), números ( [0-9] ) e _ são considerados caracteres de palavras.

Assim, o exemplo de regex que você postou ( \b[A-Z]+\b ) significa encontrar a string mais longa entre dois limites de palavras e que consiste apenas em letras maiúsculas. Pode ser mais fácil de explicar pelo exemplo:

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
    
por 07.04.2013 / 03:37
0
egrep '\b[A-Z]+\b' filename.sh

Vamos dividir:

  1. [A-Z] representa qualquer caractere na classe de caractere [ABCDEFGHIJKLMNOPQRSTUVWXYZ] .
  2. [A-Z]+ representa uma ou mais ocorrências de caracteres maiúsculos. As correspondências de exemplo seriam: A , HELLO , IS , I , ELEPHANT , etc.
  3. '\bINDIA\b' : é exatamente como uma pesquisa WORD WORD para a palavra INDIA em maiúsculas. Não NÃO corresponderia a INDIANA . Assim, aplicando o mesmo princípio - '\b[A-Z]+\b' ficaria para palavras inteiras com uma ou mais letras em maiúsculas.
  4. Assim, egrep '\b[A-Z]+\b' filename.sh procuraria palavras com uma ou mais letras maiúsculas no arquivo - filename.sh .

\b - é exatamente como uma pesquisa de palavras inteira.

    
por 28.07.2018 / 00:16