Regex 正则表达式只匹配整个单词
我有一个正则表达式,用于查找给定内容块中的所有单词,不区分大小写,它们包含在数据库中存储的词汇表中。这是我的模式:Regex 正则表达式只匹配整个单词,regex,word-boundary,Regex,Word Boundary,我有一个正则表达式,用于查找给定内容块中的所有单词,不区分大小写,它们包含在数据库中存储的词汇表中。这是我的模式: /($word)/i 问题是,如果我使用/(Foo)/I,那么像食物这样的词就会匹配。单词的两边必须有空格或单词边界 当单词位于句子的开头、中间或结尾时,如何修改表达式以仅匹配单词Foo?使用单词边界: /\b($word)\b/i 或者,如果你正在搜索“S.p.E.C.T.R.E.”,比如西南努尔的例子: /(?:\W|^)(\Q$word\E)(?:\W|$)/i 使用单
/($word)/i
问题是,如果我使用/(Foo)/I
,那么像食物这样的词就会匹配。单词的两边必须有空格或单词边界
当单词位于句子的开头、中间或结尾时,如何修改表达式以仅匹配单词Foo
?使用单词边界:
/\b($word)\b/i
或者,如果你正在搜索“S.p.E.C.T.R.E.”,比如西南努尔的例子:
/(?:\W|^)(\Q$word\E)(?:\W|$)/i
使用单词边界:
/\b($word)\b/i
或者,如果你正在搜索“S.p.E.C.T.R.E.”,比如西南努尔的例子:
/(?:\W|^)(\Q$word\E)(?:\W|$)/i
使用\b
可以产生令人惊讶的结果。你最好弄清楚是什么把一个词从它的定义中分离出来,并将这些信息合并到你的模式中
#!/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";
}
输出:
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"
编译REx“\b(S\.P\.E\.C\.T\.R\.E\.)\b”
最终课程:
1:绑定(2)
2:OPEN1(4)
4:精确(9)
9:1(11)
11:已绑定(12)
12:完(0)
锚定“S.P.E.C.T.R.E.”在0(检查锚定)stclass边界最小14处
在sv中猜测雷克斯“\b(S\.P\.E\.C\.T\.R\.E\)\b”对“S.P”的比赛开始
E.C.T.R.E.(反情报特别执行官,”。。。
在偏移量0处发现锚定的substr“S.P.E.C.T.R.E.”。。。
开始位置:0检查位置:0秒:0结束位置:1
不矛盾的STCLASS。。。
猜测:在偏移量0处匹配
将REx“\b(S\.P\.E\.C\.T\.R\.E\)\b”与“S.P.E.C.T.R.E.(特别执行官
反情报用途,“。。。
0 | 1:界(2)
0 | 2:OPEN1(4)
0 | 4:精确(9)
14 | 9:CLOSE1(11)
14 | 11:绑定(12)
失败。。。
比赛失败
释放雷克斯:“\b(S\.P\.E\.C\.T\.R\.E\)\b”
使用\b
可以产生令人惊讶的结果。你最好弄清楚是什么把一个词从它的定义中分离出来,并将这些信息合并到你的模式中
#!/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";
}
输出:
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"
编译REx“\b(S\.P\.E\.C\.T\.R\.E\.)\b”
最终课程:
1:绑定(2)
2:OPEN1(4)
4:精确(9)
9:1(11)
11:已绑定(12)
12:完(0)
锚定“S.P.E.C.T.R.E.”在0(检查锚定)stclass边界最小14处
在sv中猜测雷克斯“\b(S\.P\.E\.C\.T\.R\.E\)\b”对“S.P”的比赛开始
E.C.T.R.E.(反情报特别执行官,”。。。
在偏移量0处发现锚定的substr“S.P.E.C.T.R.E.”。。。
开始位置:0检查位置:0秒:0结束位置:1
不矛盾的STCLASS。。。
猜测:在偏移量0处匹配
将REx“\b(S\.P\.E\.C\.T\.R\.E\)\b”与“S.P.E.C.T.R.E.(特别执行官
反情报用途,“。。。
0 | 1:界(2)
0 | 2:OPEN1(4)
0 | 4:精确(9)
14 | 9:CLOSE1(11)
14 | 11:绑定(12)
失败。。。
比赛失败
释放雷克斯:“\b(S\.P\.E\.C\.T\.R\.E\)\b”
要匹配整个单词,您可以使用模式(\w+)
假设您正在使用PCRE或类似产品:
以上截图摘自本实例:
将命令行上的所有单词与(\w+)
我将使用on通过称为
启动phpsh,将一些内容放入变量中,匹配word
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
preg_match方法使用PHP语言中的PCRE引擎来分析变量:$content1
、$content2
和$content3
以及(\w)+
模式
$content1和$content2至少包含一个单词,$content3不包含
将命令行上的大量文字与(dart | fart)
变量gun1和gun2包含字符串dart或fart。gun4不包含。但是查找单词fart
匹配farty
可能会有问题。若要解决此问题,请在正则表达式中强制执行单词边界
将命令行上的文字与单词边界匹配。
因此,它与上一个示例相同,只是内容中不存在带有\b
单词边界的fart
,farty
要匹配任何整个单词,您将使用模式(\w+)
假设您正在使用PCRE或类似产品:
以上截图摘自本实例:
将命令行上的所有单词与(\w+)
我将使用on通过称为
启动phpsh,将一些内容放入变量中,匹配word
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
preg_match方法使用PHP语言中的PCRE引擎来分析变量:$content1
、$content2
和$content3
以及(\w)+
模式
$content1和$content2至少包含一个单词,$content3不包含
将命令行上的大量文字与(dart | fart)
变量gun1和gun2包含字符串dart或fart。gun4不包含。但是查找单词fart
匹配farty
可能会有问题。若要解决此问题,请在正则表达式中强制执行单词边界
将命令行上的文字与单词边界匹配。
因此,它与上一个示例相同,只是内容中不存在带有\b
单词边界的单词fart
,farty
,使用单词边界\b
以下内容(使用四个转义)适用于我的环境:Mac,safari版本10.0.3(12602.4.8)
使用单词边界\b
以下内容(使用四个转义)适用于我的环境:Mac,safari版本10.0.3(12602.4.8)
如果你是在记事本上做的++
[\w]+
将为您提供整个单词,您可以添加括号将其作为一个组。例如:conv1=Conv2D(64,(3,3),activation=LeakyReLU(alpha=a),padding='valid',kernel\u initializer='he\u normal')(inputs)
。我想将LeakyReLU
移动到