2011-12-20 10 views
0

regxのスペースに注意してください!とにかく貢献しようとする皆さんに感謝します。スペースでは、私は本当に挑戦しています。この正規表現は何を意味しますか:\ d {3} - \ d {4}。*

私は、現在のコードは次のように持っていました:

Perl5Compiler compiler = new Perl5Compiler(); 
Perl5Matcher matcher = new Perl5Matcher(); 
Pattern pattern = compiler.compile("\\ d{ 3 } -\\d{4}.* "); // pattern for string starting with " 00 0 - 00 0 0 " 

if (matcher.matches(Num, pattern)) { 
    return true; 
} 

しかし、私は"\\ d{ 3 } -\\d{4}.* "" 00 0 - 00 0 0 "と一致することを右感じることはありません。誰でもこの正規表現の本当の意味を知っていますか?または、別の観点から、 "00 0 - 00 0 0"の正しい正規表現は何ですか?

+1

あなたはそれが\\' D'だと確信しており、ありませんの? –

+0

はい私は確信しています。しかし、これも既存のバグである可能性があります。代わりに "\\ d {3} - \\ d {4}。*"という意味を知っていますか? – Mike

+1

Re "スペースで、私は推測するのは本当に挑戦的です。"、いいえ、空白はゴミです。 – ikegami

答えて

2

これらの人々はそれが

###-####に一致することが正しいです。しかし、彼らは基本的に意味.*を説明するために忘れている「何か」は、.は、改行以外の任意の文字を表します。

正規表現の成功に大きな影響はありませんが、マッチすると正規表現が複数の改行にまたがることを防ぎます。これは通常、あなたの入力に改行を期待するかどうか、そしてそれらが明らかに何を意味するかによって、理想的です。

EDIT:また、スペースが内部の意味がまず第一に、編集された正規表現は、{} の間のスペースで、Javaでコンパイルされません、それは数字のみを定量化するために探しています。だから、

、あなたはそれが、この場合の「d」は文字通りの文字「D」と「#」は再び任意の数字です

" ddd -#### "

にマッチします{}の間から、これらのスペースを削除仮定値。再びこれには任意に、.*のため何かが続きます。しかし、.*の後に余分なスペースがあるので、一致する文字列も少なくとも1つのスペースで終了する必要があります。それはかなり無駄な表現ですが、最初にそれを解釈したいと確信していますd文字通り??あなたは、また.....再び楽しい事実を

をあなたの構文をチェックする必要がありますおそらく、最初のスペースをエスケープする必要はありません、あなたの正規表現

"\\ d{3} -\\d{4}.* "" d{3} -\\d{4}.* "

+0

もう一度質問を参照してください、ありがとう – Mike

+0

私は違いを参照してください、私はあなたの正規表現はまだエラーがあると思う、私の編集を参照してください。 – gnomed

+0

私はほとんどこれに満足しています。 – Mike

1

(スペースが削除された場合)、この正規表現は、フォーム#が数字を表し、-文字通り-手段

###-#### 

の任意の式に一致します。

+0

質問が元に戻りました。見てください – Mike

1

(スペースを削除して)電話番号(サンの国コードと市外局番)と一致するはずです。 (各Xは数字である)<four digits>、又はXXX-XXXX -

\d{3}-\d{4}<three digits>を意味します。

+0

再度、感謝の質問を参照してくださいしてください。それは電話番号ではなく、顧客が検索ボックスに入力できる内容です。 – Mike

1

これはJakarta Oro(これは2年間は引退しています)の使用方法です。

正規表現^\d{3}-\d{4}.*$を受け取った場合、実際には(スペースチャレンジされた)コメントには、つまり3文字で始まる文字列が一致するため、スペースが完全に乱れていることがわかります。数字、ハイフン、4桁の順に入力します。

そして、それは正規表現マッチングの定義ではない(と私は正規表現をアンカー理由である)全体の入力を一致させようとするので.matches()は誤った名称である(ので、そのことについては、Javaの.matches()方法である)ことに注意してください。

+0

質問をもう一度見てください。 – Mike

+0

私が見る唯一のことは、oroはデフォルトでperlの '/ x'修飾子を使用しており、そのコメントは確かに挑戦されているということです。 – fge

+0

/xであっても、 '\ d {3}'は '\ d {3}'と同じではありません。 – ikegami

4

文字列リテラル構文的に同等です

"\\d{3}-\\d{4}.*" 

は、文字列を生成

​​ Perl5Matcher正規表現パターンとして使用する場合

、それは3桁

  1. 開始*上がらない0以上の文字が続く4桁の数字
  2. 続くダッシュ
  3. 続く
  4. 文字列と一致します改行**
  5. 文字列の最後に改行が続きます。例えば

  • 123-1234:マッチ
  • 123-1234XYZ
  • :マッチ
  • 123-1A34:不一致
  • 1234-123:不一致
  • X123-1234:不一致
Perlで

* 、は、Unicodeの "小数" の一般部門と任意の文字です。 Unicode 6.0には、09を含む420の文字があります。 Perl5Matcherライブラリーを使用しているときに、正確に\dという文字が一致するかどうかわかりません。 \dの代わりに[0-9]を使用すると、09にのみ一致します。

* * —デフォルトでは、.は改行以外のすべての文字に一致します。 Perl5Compilerは、.が改行を含む任意の文字と一致するはずであることを伝えることができます。

+0

もう一度質問を見ることができますか?元の質問には、これらの正規表現の周囲にスペースがあります。 – Mike

+0

@Mike、スペースは確かにある時点で事故によって追加された。それらを取り除く。 – ikegami

+0

ありがとうございます。私はあなたが正しいと思います。これは既存のバグです。これがバグであることを確認することができます。 – Mike

1

正規表現\ d{3} -\d{4}.*は、ddd -XXXXYという形式の文字列と一致します。Xの各数字は任意の数字になり、Yは任意の文字列にできます。

それはあなたが何が起こっているかをお見せするために視覚的なヘルパーがある場合、この正規表現が何をするか確認するために簡単です: `\\ D 'http://www.debuggex.com/?re=%5C+d%7B3%7D+-%5Cd%7B4%7D.%2A+&str=+ddd+-9662%C2%A3%C2%AA%C2%A3%3B%29+

+0

OMG - これは私が今日見た中で最もセクシーなものです... +1! – Sisyphus

関連する問題