Bingung soal batas kata

13

Saya sudah banyak meneliti ini, tetapi saya masih belum jelas. Apa arti batas kata ? Apa fungsinya?

Jadi, misalnya, bisakah seseorang menjelaskan perintah ini kepada saya?

egrep '\b[A-Z]+\b' filename.sh
pengguna36683
sumber
1
"Batas kata" adalah apa pun yang digunakan oleh alat yang digunakan ... beberapa orang menganggap nospace / spasi atau ruang / nospace sebagai batas kata, yang lain menganggap "kata" terdiri dari [azA-Z0-9_]. Periksa manual untuk egrep(1), mungkin doumentation untuk ekspresi reguler yang digunakan.
vonbrand

Jawaban:

12

Seperti dijelaskan di sini , misalnya, itu cocok dengan kata - kata:

Ada tiga posisi berbeda yang memenuhi syarat sebagai batas kata:

  1. Sebelum karakter pertama dalam string, jika karakter pertama adalah karakter kata.
  2. Setelah karakter terakhir dalam string, jika karakter terakhir adalah karakter kata.
  3. Antara dua karakter dalam string, di mana satu adalah karakter kata dan yang lainnya bukan karakter kata.

Berikut adalah contoh dari masing-masing kasus tersebut:

  1. Untuk string foobar, case pertama cocok

     foobar
    ^-----here
    
  2. Untuk string foobar, case kedua cocok

    foobar
          ^--here
    
  3. Untuk string foo bar, case ketiga akan cocok

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

Apa yang memenuhi syarat sebagai karakter kata tergantung pada implementasi ekspresi reguler spesifik. Namun dalam semua kasus, huruf ( [a-z]dan [A-Z]), angka ( [0-9]) dan _dianggap sebagai karakter kata.


Jadi, contoh regex yang Anda posting ( \b[A-Z]+\b) berarti menemukan string terpanjang di antara dua batas kata dan yang hanya terdiri dari huruf besar. Mungkin lebih mudah untuk dijelaskan dengan contoh:

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
terdon
sumber
Penjelasan yang bagus, perlu diketahui bahwa Solaris egrep(atau /usr/xpg4/bin/egrep) tidak memperlakukan \bcara ini. Misalnya, echo "FOOBAR" | egrep '\b[A-Z]+\b'tidak akan cocok.
Peter
0
egrep '\b[A-Z]+\b' filename.sh

Mari kita hancurkan:

  1. [A-Z]mewakili salah satu karakter di kelas karakter [ABCDEFGHIJKLMNOPQRSTUVWXYZ].
  2. [A-Z]+mewakili satu atau lebih kemunculan karakter huruf besar. Misalnya pertandingan akan menjadi: A, HELLO, IS, I, ELEPHANT, dll
  3. '\bINDIA\b': persis seperti pencarian KATA SELURUH untuk kata INDIAdalam huruf besar. TIDAK akan cocok INDIANA. Dengan demikian menerapkan prinsip yang sama - '\b[A-Z]+\b'akan mencari seluruh kata memiliki satu atau lebih huruf dalam huruf besar.
  4. Dengan demikian egrep '\b[A-Z]+\b' filename.shakan mencari kata-kata yang memiliki satu atau lebih huruf semua huruf besar dalam file - filename.sh.

\b - Persis seperti seluruh pencarian kata.

Sanket Rajgarhia
sumber