#!/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"
"Not the answer you're looking for? Browse other questions tagged regex word-boundary or ask your own question.".match(/([^\s]+)/g) →(17)['Not',' the','answer',“you're”,' looking','for?','Browse',' other','questions','tagged',' regex','word-boundary',' or','ask',' your','own',' question']
7条答案
按热度按时间c7rzv4ha1#
使用单词边界:
或者如果你正在搜索“S.P.E.C.T.R.E.”,就像希南Ünür的例子一样:
lzfw57am2#
要匹配任何完整的单词,请使用模式
(\w+)
假设你正在使用PCRE或类似的东西:
上面的屏幕截图取自此示例:https://regex101.com/r/FGheKd/1
用
(\w+)
匹配命令行中的任意整字我将在Ubuntu 12.10上使用phpsh interactive shell,通过称为preg_match的方法演示PCRE regex engine
启动phpsh,将一些内容放入一个变量中,匹配word。
preg_match方法使用PHP语言中的PCRE引擎来分析变量:
$content1
、$content2
和$content3
,具有(\w)+
模式。$content1和$content2至少包含一个单词,$content3不包含。
在命令行中用
(dart|fart)
匹配多个文字变量gun1和gun2包含字符串dart或fart。gun4没有。但是,查找单词
fart
匹配farty
可能是一个问题。要解决这个问题,请在regex中强制单词边界。将命令行上的文字与单词边界进行匹配。
因此,除了内容中不存在具有
\b
单词边界的单词fart
之外,它与前面的示例相同:一米一米一。eagi6jfj3#
使用
\b
可以产生令人惊讶的结果,您最好弄清楚单词与其定义之间的区别,并将这些信息合并到您的模式中。输出:
1qczuiv04#
对于那些想要在代码中验证枚举的人,您可以遵循指南
在正则表达式世界中,你可以使用
^
作为字符串的开始,$
作为字符串的结束。将它们与|
结合使用可能是你想要的:^(Male)$|^(Female)$
它只会在
Male
或Female
的情况下返回true。vngu2lb85#
如果您正在使用Notepad++
会给予你整个单词,你可以添加括号来得到它作为一个组。例如:
conv1 = Conv2D(64, (3, 3), activation=LeakyReLU(alpha=a), padding='valid', kernel_initializer='he_normal')(inputs)
。我想把LeakyReLU
作为注解移动到它自己的行中,并替换当前的激活。在notepad++中,可以使用下面的find命令来完成:而replace命令变为:
空格是为了在我的代码中保持正确的格式。:)
rqmkfv5c6#
使用字边界\b,
下面的代码(使用四个转义)在我的环境中工作:Mac,safari版本10.0.3(12602.4.8)
r3i60tvu7#
获取字符串中的所有“单词”
/([^\s]+)/g
基本上
^/s
意味着在空格上断开(或匹配非空格的组)不要忘记贪婪的
g
试试:
"Not the answer you're looking for? Browse other questions tagged regex word-boundary or ask your own question.".match(/([^\s]+)/g)
→(17)['Not',' the','answer',“you're”,' looking','for?','Browse',' other','questions','tagged',' regex','word-boundary',' or','ask',' your','own',' question']