正则expression式匹配整个单词
我想匹配整个词的正则expression式。
在下面的例子中,我试图匹配s
或season
但我有什么匹配s
, e
, a
, o
和n
。
[s|season]
我如何制定正则expression式来匹配整个单词?
方括号是用于字符类的,而你实际上是想匹配以下任何一个: s
, |
, s
(再次), e
, a
, s
(再次), o
和n
。
使用括号代替分组:
(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
variablesgun1
和gun2
包含stringdart
或fart
是正确的,但是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色都会匹配。 将匹配0
或1
或2
并且[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])