Saya memiliki ekspresi regex yang saya gunakan untuk menemukan semua kata dalam blok konten tertentu, tidak peka huruf besar / kecil, yang terkandung dalam glosarium yang disimpan dalam database. Inilah pola saya:
/($word)/i
Masalahnya adalah, jika saya menggunakan /(Foo)/i
maka kata-kata seperti Food
cocok. Harus ada spasi atau batas kata di kedua sisi kata.
Bagaimana cara mengubah ekspresi saya agar hanya cocok dengan kata Foo
yang merupakan kata di awal, tengah, atau akhir kalimat?
regex
word-boundary
Aaron
sumber
sumber
\b(<|>=)\b
tidak cocok>=
\b[-|+][0-9]+\b
pertandingan+10
di43E+10
. Keduanya saya tidak mau.Untuk mencocokkan seluruh kata, Anda akan menggunakan polanya
(\w+)
Dengan asumsi Anda menggunakan PCRE atau yang serupa:
Tangkapan layar di atas diambil dari contoh langsung ini: http://regex101.com/r/cU5lC2
Mencocokkan seluruh kata pada baris perintah dengan
(\w+)
Saya akan menggunakan shell interaktif phpsh di Ubuntu 12.10 untuk mendemonstrasikan mesin regex PCRE melalui metode yang dikenal sebagai preg_match
Mulai phpsh, masukkan beberapa konten ke dalam variabel, cocokkan dengan kata.
el@apollo:~/foo$ phpsh php> $content1 = 'badger' php> $content2 = '1234' php> $content3 = '$%^&' php> echo preg_match('(\w+)', $content1); 1 php> echo preg_match('(\w+)', $content2); 1 php> echo preg_match('(\w+)', $content3); 0
Metode preg_match digunakan mesin PCRE dalam bahasa PHP untuk menganalisis variabel:
$content1
,$content2
dan$content3
dengan(\w)+
pola.$ content1 dan $ content2 mengandung setidaknya satu kata, $ content3 tidak.
Cocokkan sejumlah kata literal pada baris perintah dengan
(dart|fart)
el@apollo:~/foo$ phpsh php> $gun1 = 'dart gun'; php> $gun2 = 'fart gun'; php> $gun3 = 'farty gun'; php> $gun4 = 'unicorn gun'; php> echo preg_match('(dart|fart)', $gun1); 1 php> echo preg_match('(dart|fart)', $gun2); 1 php> echo preg_match('(dart|fart)', $gun3); 1 php> echo preg_match('(dart|fart)', $gun4); 0
Variabel gun1 dan gun2 berisi string dart atau fart. gun4 tidak. Namun mungkin masalah mencari kata yang
fart
cocokfarty
. Untuk memperbaikinya, terapkan batas kata dalam regex.Cocokkan kata literal pada baris perintah dengan batas kata.
el@apollo:~/foo$ phpsh php> $gun1 = 'dart gun'; php> $gun2 = 'fart gun'; php> $gun3 = 'farty gun'; php> $gun4 = 'unicorn gun'; php> echo preg_match('(\bdart\b|\bfart\b)', $gun1); 1 php> echo preg_match('(\bdart\b|\bfart\b)', $gun2); 1 php> echo preg_match('(\bdart\b|\bfart\b)', $gun3); 0 php> echo preg_match('(\bdart\b|\bfart\b)', $gun4); 0
Jadi itu sama dengan contoh sebelumnya kecuali bahwa kata
fart
dengan\b
batas kata tidak ada dalam konten:farty
.sumber
Penggunaan
\b
dapat memberikan hasil yang mengejutkan. Anda akan lebih baik mencari tahu apa yang memisahkan kata dari definisinya dan memasukkan informasi itu ke dalam pola Anda.#!/usr/bin/perl use strict; use warnings; use re 'debug'; my $str = 'S.P.E.C.T.R.E. (Special Executive for Counter-intelligence, Terrorism, Revenge and Extortion) is a fictional global terrorist organisation'; my $word = 'S.P.E.C.T.R.E.'; if ( $str =~ /\b(\Q$word\E)\b/ ) { print $1, "\n"; }
Keluaran:
sumber
gunakan batasan kata \ b,
Berikut ini (menggunakan empat pelarian) berfungsi di lingkungan saya: Mac, safari Versi 10.0.3 (12602.4.8)
var myReg = new RegExp(‘\\\\b’+ variable + ‘\\\\b’, ‘g’)
sumber
Bagi Mereka yang ingin memvalidasi Enum dalam kodenya, Anda dapat mengikuti panduan ini
Di Dunia Regex Anda dapat menggunakan
^
untuk memulai string dan$
mengakhirinya. Menggunakannya dalam kombinasi dengan|
bisa menjadi apa yang Anda inginkan:^(Male)$|^(Female)$
Ini akan mengembalikan true hanya untuk
Male
atauFemale
case.sumber
^
dan$
cocok dengan awal (masing-masing akhir) baris, oleh karena itu contoh Anda akan cocok hanya jika itu adalah satu-satunya kata dalam baris.Jika Anda melakukannya di Notepad ++
[\w]+
Akan memberi Anda seluruh kata, dan Anda dapat menambahkan tanda kurung untuk mendapatkannya sebagai grup. Contoh:
conv1 = Conv2D(64, (3, 3), activation=LeakyReLU(alpha=a), padding='valid', kernel_initializer='he_normal')(inputs)
. Saya ingin pindahLeakyReLU
ke barisnya sendiri sebagai komentar, dan mengganti aktivasi saat ini. Di notepad ++ ini dapat dilakukan dengan menggunakan perintah follow find:([\w]+)( = .+)(LeakyReLU.alpha=a.)(.+)
dan perintah ganti menjadi:
\1\2'relu'\4 \n # \1 = LeakyReLU\(alpha=a\)\(\1\)
Spasi digunakan untuk menjaga format yang benar dalam kode saya. :)
sumber
Dapatkan semua "kata" dalam sebuah string
/([^\s]+)/g
sumber