Confuso sul limite delle parole


13

Ho fatto molte ricerche su questo, ma non sono ancora chiaro. Cosa significa confine di parole ? Che cosa fa?

Quindi, per esempio, qualcuno potrebbe spiegarmi questo comando per favore?

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

1
Un "limite di parole" è qualunque cosa lo strumento utilizzato definisca come tale ... alcuni considerano nospace / spazio o spazio / nospace un limite di parole, altri considerano una "parola" come composta [azA-Z0-9_]. Controlla il manuale per egrep(1), forse la documentazione per le espressioni regolari in uso.
vonbrand

Risposte:


12

Come descritto qui , ad esempio, corrisponde tra le parole:

Esistono tre diverse posizioni che si qualificano come limiti di parole:

  1. Prima del primo carattere nella stringa, se il primo carattere è un carattere parola.
  2. Dopo l'ultimo carattere nella stringa, se l'ultimo carattere è un carattere parola.
  3. Tra due caratteri nella stringa, dove uno è un carattere di parola e l'altro non è un carattere di parola.

Ecco alcuni esempi di ciascuno di questi casi:

  1. Per la stringa foobar, il primo caso corrisponde

     foobar
    ^-----here
    
  2. Per la stringa foobar, il secondo caso corrisponde

    foobar
          ^--here
    
  3. Per la stringa foo bar, il terzo caso corrisponderà

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

Ciò che si qualifica come carattere parola dipende dall'implementazione specifica dell'espressione regolare. In tutti i casi, tuttavia, le lettere ( [a-z]e [A-Z]), i numeri ( [0-9]) e _sono considerati caratteri di parole.


Quindi, l'esempio regex che hai pubblicato ( \b[A-Z]+\b) significa trovare la stringa più lunga che si trova tra due limiti di parole e che consiste solo di lettere maiuscole. Potrebbe essere più facile da spiegare con l'esempio:

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

Ottima spiegazione, basta notare che Solaris egrep(né /usr/xpg4/bin/egrep) non tratta in \bquesto modo. Ad esempio, echo "FOOBAR" | egrep '\b[A-Z]+\b'non corrisponderebbe.
Peter,

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

Dividiamolo:

  1. [A-Z]rappresenta qualsiasi personaggio nella classe di caratteri [ABCDEFGHIJKLMNOPQRSTUVWXYZ].
  2. [A-Z]+rappresenta una o più occorrenze di caratteri maiuscoli. Partite esempio potrebbe essere: A, HELLO, IS, I, ELEPHANT, etc.
  3. '\bINDIA\b': è esattamente come una ricerca IN TUTTA PAROLA per la parola INDIAin maiuscolo. Sarebbe NON corrispondere INDIANA. Applicando così lo stesso principio, '\b[A-Z]+\b'cercherebbero parole intere con una o più lettere maiuscole.
  4. Quindi egrep '\b[A-Z]+\b' filename.shcercherebbe le parole con una o più lettere tutte in maiuscolo nel file - filename.sh.

\b - è esattamente come una ricerca di parole intere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.