正则表达式找到一个正好包含3个单词的行

问题描述:

我有一个问题,需要我编写一个正则表达式,它找到一行包含3组字符(可以是单词或数字)并以另一个特定字。我想到的方式是找到一个在空间中结束的模式,然后查找它3次。假设这是正确的方法,我不知道如何找到一个空间,但我认为它看起来像。*“找到一个空间”{3} endword $。这是这样做的方式吗?即使它不是这样做的,你如何找到一个空间?有什么建议么?正则表达式找到一个正好包含3个单词的行

三组字假设你会接受任何非空格字符,你可以写:

/^\s*(?:\S+\s+){3}endword$/ 

初始插入符号是要确保你有正是 3个非空间群上该线。

当然,你需要考虑是否可以出现像控制字符这样的东西,并进行相应的调整。

+0

最初的脱字符号确保一个角色出现,我得到那部分。但是(?:S + \ s +)是我不明白的部分?你能解释一下它的含义吗? – user3137110 2015-02-09 04:06:45

+0

'\ S'是任何_nonspace_字符,'s'是任何空格字符。当“(?:)”中出现某个东西时,它就成为一个非捕获组。展开所有东西,你将得到'/^\ s * \ S + \ s + \ S + \ s + \ S + \ s + endword $ /'这是一个以零或多个空格开始的字符串,然后是三个由空格分隔的单词,空格然后是第四个单词,即“endword”。 – 2015-02-09 05:33:03

根据您的口味,像下面会做:

\b+.+?\b+.+?\b+.+?\bendword$ 

这使得使用这个词的边界标志(\b)和非贪婪的重复(+?),所以它可能会略有不同在你的具体实现中,特别是如果你使用的东西类似grep