为了账号安全,请及时绑定邮箱和手机立即绑定

Regex只匹配整个单词

Regex只匹配整个单词

当年话下 2019-05-31 13:20:14
Regex只匹配整个单词我有一个regex表达式,用于查找存储在数据库中的词汇表中包含的给定内容块(大小写不敏感)中的所有单词。这是我的模式:/($word)/i问题是如果我用/(Foo)/i然后像这样的词Food匹配。单词的两边需要有空格或单词边界。如何将表达式修改为只匹配单词Foo当它是一个词在一个句子的开头,中间,还是结尾?
查看完整描述

4 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

使用\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"


查看完整回答
反对 回复 2019-05-31
?
FFIVE

TA贡献1797条经验 获得超6个赞

使用单词边界\b,

下面(使用四种转义)在我的环境中工作:Mac,Safari版本10.0.3(12602.4.8)

var myReg = new RegExp(‘\\\\b’+ variable + ‘\\\\b’, ‘g’)


查看完整回答
反对 回复 2019-05-31
?
HUX布斯

TA贡献1876条经验 获得超6个赞

使用单词边界:

/\b($word)\b/i

或者你在寻找“S.P.E.C.T.R.E.”就像西南·纽尔的例子:

/(?:\W|^)(\Q$word\E)(?:\W|$)/i


查看完整回答
反对 回复 2019-05-31
  • 4 回答
  • 0 关注
  • 893 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信