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


13

私はこれをよく研究していますが、まだはっきりしていません。単語の境界とはどういう意味ですか?それは何をするためのものか?

それで、例えば、誰かが私にこのコマンドを説明してもらえますか?

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

1
「単語の境界」とは、使用されるツールで定義されているものです... nospace / spaceまたはspace / nospaceを単語の境界とみなすものもあれば、「word」をで構成されるとみなすものもあり[azA-Z0-9_]ます。egrep(1)おそらく、使用中の正規表現の修正については、マニュアルを確認してください。
フォンブランド

回答:


12

ここで説明したように、たとえば、単語ます:

単語の境界として認められる3つの異なる位置があります。

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

これらの各ケースの例を次に示します。

  1. 文字列foobarでは、最初のケースが一致します

     foobar
    ^-----here
    
  2. 文字列foobarでは、2番目のケースが一致します

    foobar
          ^--here
    
  3. 文字列foo barでは、3番目のケースが一致します

    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

優れた説明です。Solarisのegrep(または/usr/xpg4/bin/egrep)は\bこのように扱わないことに注意してください。たとえば、echo "FOOBAR" | egrep '\b[A-Z]+\b'一致しません。
ピーター

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

それを分割してみましょう:

  1. [A-Z]文字クラスの任意の1文字を表します [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
  2. [A-Z]+1つ以上の大文字の出現を表します。例のマッチは次のようになりますAHELLOISIELEPHANT、など
  3. '\bINDIA\b'INDIA大文字の単語の完全な単語検索とまったく同じです。それは考えないで一致しますINDIANA。したがって、同じ原則を適用すると、'\b[A-Z]+\b'大文字で1文字以上の単語全体が検索されます。
  4. したがってegrep '\b[A-Z]+\b' filename.sh、ファイル内の大文字で1文字以上の単語を検索します- filename.sh

\b -単語全体の検索とまったく同じです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.