首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配单词或其前缀的正则表达式

问匹配单词或其前缀的正则表达式
EN

Stack Overflow用户
提问于 2013-08-23 20:05:34
回答 2查看 516.9K关注 0票数 138

我想在整个单词上匹配一个正则表达式。

在下面的示例中,我尝试匹配s或season,但我得到的匹配s、e、a、o和n。

代码语言:javascript
复制
[s|season]

如何创建正则表达式来匹配整个单词?

EN

回答 2

Stack Overflow用户

发布于 2014-01-07 01:31:45

使用此在线实况示例来测试您的模式:

​

​

上面的屏幕截图来自这个实时示例:https://regex101.com/r/cU5lC2/1

匹配命令行上的任何完整单词。

我将使用Ubuntu 12.10上的phpsh interactive shell通过名为preg_match的方法来演示PCRE regex engine

启动phpsh,将一些内容放入一个变量中,匹配word。

代码语言:javascript
复制
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和带有(\w)+模式的$content3。

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

在没有单词边界的情况下匹配命令行上的特定单词

代码语言:javascript
复制
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

变量gun1和gun2包含正确的字符串dart或fart,但是gun3包含darty并且仍然匹配,这就是问题所在。所以我们来看下一个例子。

将命令行上的特定单词与单词边界进行匹配:

可以使用\b强制匹配单词边界,请参阅:

​

从http://jex.im/regulex和https://github.com/JexCheng/regulex获取的Regex可视图像示例:

代码语言:javascript
复制
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”不匹配。

票数 153
EN

Stack Overflow用户

发布于 2013-08-23 20:09:37

[ ]定义了一个字符类。因此,您在那里设置的每个字符都将匹配。[012]将与0、1或2匹配,而[0-2]的行为相同。

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

顺便说一句。你得当心了。普通正则表达式(或分组中)中的元字符与字符类不同。字符类就像一种子语言。[$A]将只与$或A匹配,其他不匹配。在这里,不能为了美元而逃脱。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18402416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档