正则expression式匹配整个单词

我想匹配整个词的正则expression式。

在下面的例子中,我试图匹配sseason但我有什么匹配seaon

 [s|season] 

我如何制定正则expression式来匹配整个单词?

方括号是用于字符类的,而你实际上是想匹配以下任何一个: s|s (再次), eas (再次), on

使用括号代替分组:

 (s|season) 

或非捕获组:

 (?:s|season) 

注意:非捕获组告诉引擎它不需要存储匹配,而另一个(捕获组)。 对于小型的东西,要么是有用的,对于“重型”的东西,如果你需要比赛,你可能会首先看到。 如果你不这样做,最好使用非捕获组来分配更多的内存进行计算,而不是存储你永远不需要使用的东西。

使用这个在线实例来testing你的模式:

在这里输入图像说明

以上截图来自这个现场实例: https : //regex101.com/r/cU5lC2/1

在命令行上匹配任何整个单词。

我将使用Ubuntu 12.10上的phpsh交互式shell来通过称为preg_match的方法来演示PCRE正则expression式引擎

启动phpsh,把一些内容放入一个variables,匹配单词。

 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引擎来分析variables: $content1$content2$content3以及(\w)+模式。

$ content1和$ content2至less包含一个单词,$ content3不包含。

在命令行中匹配一个特定的字词,而不用单词金山词霸

 el@apollo:~/foo$ phpsh php> $gun1 = 'dart gun'; php> $gun2 = 'fart gun'; php> $gun3 = 'darty 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 

variablesgun1gun2包含stringdartfart是正确的,但是darty包含darty并且仍然匹配,那是问题。 所以下一个例子。

将命令行上的特定字词与字词金句匹配

 el@apollo:~/foo$ phpsh php> $gun1 = 'dart gun'; php> $gun2 = 'fart gun'; php> $gun3 = 'darty 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 

\b声称我们有一个字边界,确保“dart”匹配,但“darty”不是。

[ ]定义一个字符类。 所以你设置的每个angular色都会匹配。 将匹配012并且[0-2]performance相同。

你想要的是分组来定义一个or语句。 使用(s|season)解决您的问题。

顺便说一句。 你必须小心。 正则expression式(或分组内)中的元字符与字符类不同。 一个字符类就像一个子语言。 [$A]只会匹配$A ,没有别的。 美元在这里没有逃脱。

我在js中testing例子。 最简单的解决scheme – 只需添加你需要的内容//:

 var reg = /cat/; reg.test('some cat here');//1 test true // result reg.test('acatb');//2 test true // result 

现在,如果你需要这个具有边界的特定单词,而不是其他任何符号 – 字母。 我们使用b标记:

 var reg = /\bcat\b/ reg.test('acatb');//1 test false // result reg.test('have cat here');//2 test true // result 

我们还有js中的exec()方法,它返回对象结果。 它有助于获取有关我们的单词的地方/指数的信息。

 var matchResult = /\bcat\b/.exec("good cat good"); console.log(matchResult.index); // 5 

如果我们需要在string/句子/文本中得到所有匹配的单词,我们可以使用g修饰符(全局匹配):

 "cat good cat good cat".match(/\bcat\b/g).length // 3 

现在是最后一个 – 我不需要一个特定的词,但其中的一些。 我们使用| 标志,这意味着select/或。

 "bad dog bad".match(/\bcat|dog\b/g).length // 1 

用于不区分大小写的search

 ([sS][eE][aA][sS][oO][nN]) 

用于小写search

 ([s][e][a][s][o][n]) 

用于大写字母search

 ([S][E][A][S][O][N])