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

Regex 正则表达式以匹配单词或其前缀,regex,expression,word,Regex,Expression,Word,我想在整个单词上匹配正则表达式 在下面的示例中,我试图匹配s或seasure,但我拥有的匹配s、e、a、o和n [s|season] 如何生成一个正则表达式来匹配整个单词?方括号用于字符类,实际上您正在尝试匹配以下任意一个:s、|、s(再次)、e、a、s(再次)、o和n 使用括号代替分组: (s|season) 或非捕获组: (?:s|season) 注意:非捕获组告诉引擎它不需要存储匹配,而另一个组(捕获组)则需要存储匹配。对于小的东西,无论是工作,对于“重负荷”的东西,你可能想先看看

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

在下面的示例中,我试图匹配
s
seasure
,但我拥有的匹配
s
e
a
o
n

[s|season]

如何生成一个正则表达式来匹配整个单词?

方括号用于字符类,实际上您正在尝试匹配以下任意一个:
s
|
s
(再次)、
e
a
s
(再次)、
o
n

使用括号代替分组:

(s|season)
或非捕获组:

(?:s|season)


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

[]
定义字符类。所以你在那里设置的每个字符都会匹配<代码>[012]将匹配
0
1
2
[0-2]
的行为相同

您需要的是分组来定义or语句。使用
(季节)
处理您的问题

顺便说一句,你必须小心。普通正则表达式(或分组内)中的元字符与字符类不同。字符类类似于子语言<代码>[$A]将只匹配
$
A
,其他不匹配。不能在这里逃避金钱。

使用此在线直播示例来测试您的模式:

以上截图摘自本实例:

匹配命令行上的所有单词。 我将使用on通过称为

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

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
$content3
以及
(\w)+
模式

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

在命令行中匹配一个特定的单词,而不使用单词bountaries 变量
gun1
gun2
包含正确的字符串
dart
fart
,但gun3包含
darty
,并且仍然匹配,这就是问题所在。下面是下一个例子

将命令行上的特定单词与单词边界匹配: 单词边界可以与
\b
强制匹配,请参见:

从中获取的正则表达式可视图像和示例:

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”不匹配。

我在js中测试了一些示例。 最简单的解决方案-只需在/

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()方法,whichone返回对象结果。这有助于f.g.获得关于我们单词的位置/索引的信息

var matchResult = /\bcat\b/.exec("good cat good");
console.log(matchResult.index); // 5
如果我们需要获取字符串/句子/文本中所有匹配的单词,我们可以使用g修饰语(全局匹配):

现在最后一个-我不需要一个特定的词,但其中一些。我们使用|符号,它表示选择/或

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

改用
(季节)
<代码>[季节]匹配任何
s
e
a
o
n
。是的,我意识到了这一点。我需要的是不捕捉。我认为使用()总是匹配的,知道有一个不匹配的选项是很方便的,谢谢你。你理解错了。分组中的
?:
非捕获
只是说,您不能将匹配的表达式与
$1
$2
等一起使用。。。如果您希望表达式不匹配,您需要的是
^
@NMGodA1b2c3d4不客气!你的意思是一个不匹配或不捕获的选项(是的,这是有区别的)。如果您不想匹配其中任何一个,您将使用
(?!…)
insead,在本例中,这意味着
(?!s| seasure)
。因为我需要\b字符,但我不知道它,所以我投了赞成票!为什么这个彻底的解释不是答案呢?因为发布问题的人选择了第一个得到的答案,而当我后来得到了非常好的答案时,他也懒得转向我的答案。您可以通过问题下方的评论询问者,将他们的答案选择更改为此选项,这将提高此页面对登录者的价值。我投了更高的票,因为您在示例中使用了“屁”一词……我需要\w+;)
"cat good cat good cat".match(/\bcat\b/g).length
// 3 
"bad dog bad".match(/\bcat|dog\b/g).length
// 1