2012-01-28 167 views
29

我想知道正则表达式匹配单词,使单词具有最大长度。 例如,如果一个单词的长度最多为10个字符,我希望正则表达式匹配,但是如果长度超过10,那么正则表达式不应匹配。正则表达式来匹配一定长度的单词

我试图

^(\w{10})$ 

但带给我只有这个词的最小长度为10个字符相匹配。如果单词超过10个字符,它仍然匹配,但只匹配前10个字符。

+0

是否有一个原因,你不想简单地迭代单词并使用'String.length()'? – MAK 2012-01-28 08:02:52

+1

是的。这个字符串是一个更大的字符串的一部分,该字符串包含多种格式的文字 - 日期,电子邮件,网址等全部以制表符分隔的格式。我正在考虑写一个复合正则表达式来匹配整行。 – 2012-01-28 08:09:42

+0

我明白了。由于单词是由制表符分隔的,是不是可以将它们分开(使用'String.split()'或'StringTokenizer'),然后查看每个单词的长度? – MAK 2012-01-28 08:12:26

回答

39

我想你想\w{1,10}\b\b匹配单词边界。

当然,你也可以替换\b并做^\w{1,10}$。只要它是字符串的唯一内容,就会匹配至多10个字符的单词。我认为这是你之前做的事情。

因为它是Java,所以实际上你必须避开反斜杠:"\\w{1,10}\\b"。你可能已经知道这一点,但它之前已经得到了我。

+0

谢谢。我确定越狱已经得到了我以前..以及0。如果单词大于10,你提供的表达式匹配10个字符。如果单词超过10个字符,我不希望它匹配。 \ w {10,}的相反排序,你可以说...! – 2012-01-28 08:15:25

+1

@AnandHemmige:哪个表情?如果单词中有10个以上的字符,那么带'\ b'的字符不应该匹配任何内容。以'$'结尾的情况也是如此。如果字符串只是一个单词,你应该试试后者。 – 2012-01-28 08:58:58

+1

在我的VI版本(gvim for Windows)中,我需要一个反斜杠(\\)在'{'之前工作。 – 2015-12-07 09:00:00

25
^\w{0,10}$ # allows words of up to 10 characters. 
^\w{5,}$ # allows words of more than 4 characters. 
^\w{5,10}$ # allows words of between 5 and 10 characters. 
+0

我希望其中的第一个可以作为\ w {10,}的反面,但它不适用。 – 2012-01-28 08:29:06

+3

'^'和'$'将正则表达式锚定到字符串的开头和结尾。如果你想提取子匹配(特定长度的单词),那么你需要在它们的位置使用'\ b'单词边界锚:'\ b \ w {1,10} \ b'将会找到长度为1到10. – 2012-01-28 08:32:25

14

字符长度进行匹配。

​​

默认情况下,引擎很贪婪以匹配此模式。例如,如果输入为123456789,\ d {2,5}将匹配长度为5的12345.

如果您希望引擎在匹配长度为2时返回,请使用\ d {2,5}?

+1

这对我来说很有用,因为我一直在寻找正则表达式来发现比x更大的单词。 – Zenil 2013-08-08 04:56:23

相关问题