2012-01-28 16 views
29

正規表現が単語の長さが最大になるように単語を一致させることを知りたいと思います。 たとえば、単語の長さが最大10文字の場合、正規表現を一致させたいですが、長さが10を超えると、正規表現は一致しません。正規表現で特定の長さの単語を一致させる

私は

^(\w{10})$ 

を試してみましたが、それは単語の最小の長さが10個の文字である場合にのみ、私はマッチします。単語が10文字以上の場合、それでも一致しますが、最初の10文字だけが一致します。

+0

単語を繰り返し繰り返し、 'String.length()'を使用したくない理由はありますか? – MAK

+1

はい。この文字列は、日付、電子メール、URLなどの形式の単語をタブ区切り形式で含む大きな文字列の一部です。私は、ライン全体に一致する合成正規表現を書くことを考えています。 –

+0

私は参照してください。単語はタブで区切られているので、( 'String.split()'や 'StringTokenizer'を使って)分割して各単語の長さを調べることはできませんか? – MAK

答えて

39

私はあなたがほしいと思うと思う\w{1,10}\b\bは単語境界に一致します。

もちろん、\bと置き換えて^\w{1,10}$とすることもできます。これは、文字列の唯一の内容である限り、最大10文字の単語と一致します。私はこれがあなたが以前にやっていたことだと思います。

Javaのため、実際にはバックスラッシュをエスケープする必要があります:"\\w{1,10}\\b"。あなたはおそらくこれをすでに知っていただろうが、それは以前私を得ている。

+0

ありがとう。あなたが提供した式は、単語が10より大きい場合は10文字に一致します。単語が10文字を超える場合は一致しません。 \ w {10、}の反対の並べ替えを言うことができます...! –

+1

@AnandHemmige:どちらの表現ですか?単語に10文字以上がある場合、 '\ b'を持つものは何も一致しません。 '$'で終わるものについても同様です。文字列が単なる単語の場合は後者を試してください。 –

+1

私のVI版(Windows用のgvim)では、これを動作させるには '{'の前にバックスラッシュ(\\)が必要です。 –

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、}とは逆の仕組みとして動作することを望んだが、うまくいかなかった。 –

+3

'^'と '$'は文字列の先頭と末尾に正規表現を固定します。あなたがサブクラッチ(特定の長さの単語)を抽出したいならば、その場所に '\ b'単語境界アンカーを使う必要があります:' \ b \ w {1,10} \ b'は長さ1〜 10. –

14

一致する文字の長さ。

​​

デフォルトでは、エンジンはこのパターンと一致するよう貪欲です。たとえば、入力が123456789の場合、\ d {2,5}は長さが5の12345と一致します。

長さが2のときにエンジンが返るようにするには、\ d {2,5}を使用しますか?

+1

xより大きい単語を見つける正規表現を探していたので、これは私には役に立ちました。 – Zenil

関連する問題