2012-01-28 169 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

相關問題