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

NMG*_*God 108 regex expression cpu-word

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

在下面的例子中,我试图匹配s或者season我匹配的s,ea,on.

[s|season]
Run Code Online (Sandbox Code Playgroud)

如何使正则表达式匹配整个单词?

Jer*_*rry 126

方括号意味着字符类,和你实际尝试匹配的任何一个:s,|,s(再次), ,e,a(s再次),on.

使用括号代替分组:

(s|season)
Run Code Online (Sandbox Code Playgroud)

或非捕获组:

(?:s|season)
Run Code Online (Sandbox Code Playgroud)

注意:非捕获组告诉引擎它不需要存储匹配,而另一个(捕获组).对于小东西,无论是工作,对于"重型"的东西,你可能想先看看你是否需要匹配.如果不这样做,最好使用非捕获组为计算分配更多内存,而不是存储您永远不需要使用的内容.


Eri*_*ski 117

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

在此输入图像描述

以上截图取自此实例:https://regex101.com/r/cU5lC2/1

匹配命令行上的任何整个单词.

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

启动phpsh,将一些内容放入变量,匹配单词.

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
Run Code Online (Sandbox Code Playgroud)

该方法的preg_match使用的PCRE引擎PHP语言中来分析变量:$content1,$content2$content3(\w)+模式.

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

匹配命令行上的特定单词而不使用单词bountaries

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
Run Code Online (Sandbox Code Playgroud)

变量gun1gun2包含字符串dartfart哪个是正确的,但gun3包含darty并仍然匹配,这就是问题所在.所以进入下一个例子.

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

Word Boundaries可以强制匹配\b,请参阅: 从jex.im/regulex可视化分析wordboundary正在做什么

http://jex.im/regulexhttps://github.com/JexCheng/regulex获得的Regex Visual Image 示例:

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
Run Code Online (Sandbox Code Playgroud)

\b断言,我们有一个单词边界,确保"镖"是匹配的,但"DARTY"不是.

  • upvoted,因为我需要\ b char,并且不知道它! (3认同)
  • 我投票是因为你在你的例子中使用了“放屁”这个词......我需要 \w+ ;) (2认同)

Vas*_*nyk 5

我在 js 中测试示例。最简单的解决方案 - 只需在 // 中添加您需要的单词:

var reg = /cat/;
reg.test('some cat here');//1 test
true // result
reg.test('acatb');//2 test
true // result
Run Code Online (Sandbox Code Playgroud)

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

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

我们在 js 中也有 exec() 方法,它返回对象结果。它有助于 fg 获取有关我们单词的位置/索引的信息。

var matchResult = /\bcat\b/.exec("good cat good");
console.log(matchResult.index); // 5
Run Code Online (Sandbox Code Playgroud)

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

"cat good cat good cat".match(/\bcat\b/g).length
// 3 
Run Code Online (Sandbox Code Playgroud)

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

"bad dog bad".match(/\bcat|dog\b/g).length
// 1
Run Code Online (Sandbox Code Playgroud)