Regex只匹配整个单词

Regex只匹配整个单词

我有一个regex表达式,用于查找存储在数据库中的词汇表中包含的给定内容块(大小写不敏感)中的所有单词。这是我的模式:

/($word)/i

问题是如果我用/(Foo)/i然后像这样的词Food匹配。单词的两边需要有空格或单词边界。

如何将表达式修改为只匹配单词Foo当它是一个词在一个句子的开头,中间,还是结尾?


当年话下
浏览 899回答 4
4回答

慕哥6287543

使用\b会产生令人惊讶的结果。你最好弄清楚是什么把一个词和它的定义分开,并把这个信息融入到你的模式中。#!/usr/bin/perluse 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";}产出:Compiling REx "\b(S\.P\.E\.C\.T\.R\.E\.)\b" Final program:    1: BOUND (2)    2: OPEN1 (4)    4:   EXACT  (9)    9: CLOSE1 (11)   11: BOUND (12)   12: END (0) anchored "S.P.E.C.T.R.E." at 0 (checking anchored) stclass BOUND minlen 14 Guessing start of match in sv for REx "\b(S\.P\.E\.C\.T\.R\.E\.)\b" against "S.P .E.C.T.R.E. (Special Executive for Counter-intelligence,"... Found anchored substr "S.P.E.C.T.R.E." at offset 0... start_shift: 0 check_at: 0 s: 0 endpos: 1 Does not contradict STCLASS... Guessed: match at offset 0 Matching REx "\b(S\.P\.E\.C\.T\.R\.E\.)\b" against "S.P.E.C.T.R.E. (Special Exec utive for Counter-intelligence,"...    0           |  1:BOUND(2)    0           |  2:OPEN1(4)    0           |  4:EXACT (9)   14      |  9:CLOSE1(11)   14      | 11:BOUND(12)                                   failed... Match failed Freeing REx: "\b(S\.P\.E\.C\.T\.R\.E\.)\b"

FFIVE

使用单词边界\b,下面(使用四种转义)在我的环境中工作:Mac,Safari版本10.0.3(12602.4.8)var myReg = new RegExp(‘\\\\b’+ variable + ‘\\\\b’, ‘g’)

HUX布斯

使用单词边界:/\b($word)\b/i或者你在寻找“S.P.E.C.T.R.E.”就像西南·纽尔的例子:/(?:\W|^)(\Q$word\E)(?:\W|$)/i
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Oracle