単語の境界について混乱する

単語の境界について混乱する

私はこれについて多くの研究をしてきましたが、まだわかりません。何ですか単語の境界意味は?それは何をしますか?

たとえば、誰かが私にこのコマンドを説明できますか?

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

答え1

上記のようにここ、たとえば、次のように一致します。〜サイ性格:

3 つの異なる場所が単語の境界として機能します。

  1. 最初の文字が単語文字の場合は、文字列の最初の文字の前です。
  2. 文字列の最後の文字の後、最後の文字が単語文字の場合。
  3. 文字列の2文字の間。そのうちの1つは単語文字で、もう1つは単語文字ではありません。

各状況の例は次のとおりです。

  1. 文字列の場合、foobar最初のケースは一致します。

     foobar
    ^-----here
    
  2. 文字列の場合、foobar2 番目のケースが一致します。

    foobar
          ^--here
    
  3. 文字列の場合、foo bar3番目のケースが一致します。

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

単語文字の資格は、特定の正規表現の実装によって異なります。ただし、すべての場合、文字(および[a-z][A-Z]、数字([0-9])、および_は単語文字と見なされます。


したがって、あなたが投稿した正規表現(\b[A-Z]+\b)は、2つの単語境界の間にあり、大文字のみを含む最も長い文字列を見つけることです。たとえば、説明する方が簡単です。

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]+1 つ以上の大文字の発生を示します。一致の例は次のとおりです。A、、、、など。HELLOISIELEPHANT
  3. '\bINDIA\b'INDIA:大文字の単語の全単語検索とまったく同じです。そうだろういいえマッチINDIANA。したがって、同じ原則が適用されます。'\b[A-Z]+\b'1つ以上の大文字を含む単語全体が検索されます。
  4. したがって、egrep '\b[A-Z]+\b' filename.shファイル内の1つ以上の大文字 - を含む単語を検索しますfilename.sh

\b- フルワード検索と同じです。

関連情報