2016-04-07 27 views
-1

私は正規表現をしています。1から3の単語を受け入れる入力テキストがあります。それぞれの単語は最大15語までです。それは正常に動作していますが、私はそれを改善したいと思います。正規表現パターン入力の説明

^[A-Za-z]*[\s]{0,1}[A-Za-z\d\-_]{0,15}[\s]{0,15}[A-Za-z\d\-_]{0,15}$ 

サンプル(正しい)入力:これは私の パターンです

here you go 
the sample 
there you are 

そして、私は少なくとも一度は、最も3回でそれを反復処理したいhttps://regex101.com/

でテストされています、例のように。私は{1,3}について知っていますが、どのように私のパターンでそれを使うことができますか?私はこれを試してみましたが、それは動作しません:

^[A-Za-z]*[\s]{0,1}[A-Za-z]*{1,3}$ 

証明し、試験したいずれの提案は素晴らしい男だろう。 パフォーマンスについて心配する必要はありません(ただし、何か改善があれば感謝します)。私は繰り返し部分が必要です。

+0

かなり明確には聞こえませんが、できるだけパターンを短くしたいのですか? ['^(?:\ s?[A-Za-z \ d_-] {0,15}){1,3} $'](https://regex101.com/r/jG4yP9/1)のように?これは "有効でない"文字列( '_'、' --'、数字...で始まる文字列)にもマッチします。 –

+0

すごく感謝しています。あなたは男です。はい、それは私が必要なものです。 – Franco

+1

@noobは彼の答えに同じパターンを投稿しました。ああ、今それは編集されています。正規表現が本当に必要なものかどうかを再確認してください。ところで、可能な限り最短のものが常に最も正確で効率的なものではない。ところで、 '[A-Za-z \ d_]'を '\ w'に置き換えることができます。正規表現全体は '^ [A-Za-z] +(?:\ s [\ w - ] {0,15}){1,2} $'と書くことができます。 –

答えて

1

正規表現の最大長さと三つの言葉、各ワードを有する各ライン:^(?:[A-Za-z]{1,15})(?: [A-Za-z]{1,15}){0,2}$

説明:

  • (?:[A-Za-z]{1,15})は最初の単語に一致します。

  • (?: [A-Za-z]{1,15}){0,2}は、最後の2つの単語と末尾のスペースが一致しません。

Regex101 Demo

+0

申し訳ありませんが、あなたは 'abcdefghijklmnopqrstuvwxyz'と一致します –

+0

@SebastianProske:どうですか? –

+0

OP記述と既存の正規表現に基づいて、私は '/^[az] {1,15}(?:\ s + [\ w - ] {1,15}){0,2} $/i ' –

0

、このいずれかを試してみてください。わたしにはできる。

^(\w{1,15}\s+){0,2}\w{1,15}$