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

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

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

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

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

おすすめ記事