2017-02-26 8 views
-1

私は、Javaのパターンは、非空白文字のシリーズは、このコードの中に何かを含む括弧のペアが続き、空白文字のシリーズが続くかどうか一致したいと思います:Java Patternこれらのパターンマッチの問題は何ですか?

 Pattern p1 = Pattern.compile("[^\\s+][\\s*]\\({1}[.*]\\){1}"); 

しかし、とき私はそれを "a(a)"にマッチさせようとしましたが、falseが返されました。

多分類似した問題:白いスペースでsaparated

2つのウェブサイト:。句読点以下のコード(元に存在する単語の特定のリストによって分離された非空白文字の

Pattern p4 = Pattern.compile("([^\\s+]([\\.]{1}[^\\s+])+)[\\s+]([^\\s+]([\\.]{1}[^\\s+])+)"); 

2つの文字列と、またはaka ...)(これは単語のリストから始めることができます)。

Pattern p2 = Pattern.compile(
      "([^\\s+][\\s+])?([and|or|aka|&|Related to|moved from|now|formerly|and by the same host|and any address starting with]{1}[\\s+][^\\s+])+"); 


Pattern p3 = Pattern.compile("[^\\s]+[\\s*][,|&|;|\\s+/|/\\s+]{1}[\\s*][^\\s+]"); 

答えて

0

私はJavaでdocs on patternsの読み取りが便利

特定の問題かもしれないと思うあなたは間違った場所に+*を置くが、私は理由は何[something]手段を理解していないということだと思うということです。次のコード

Pattern p1 = Pattern.compile("[^\\s]+[\\s]*\\({1}.*\\){1}"); 
    //Pattern p1 = Pattern.compile("[^\\s]+[\\s]*\\(.*\\)"); //simplified same pattern 
    String t = "a (a)"; 
    Matcher matcher = p1.matcher(t); 
    System.out.println(matcher.matches()); 

prints true

0

[^\\s]+[\\s]*\\(.*?\\)

は、あなたがやりたいだろう。アスタリスクとプラス記号を文字クラスの括弧の外側に移動します。 {1}の両方のインスタンスは何も行いません。いいえ、他の数量詞では、トークンは1回繰り返され、最終的に[.*]これら2つの文字の場合は、文字通りpermit one of these two characters

[test]をt、E、またはSのいずれかの意味を意味します。 2番目のtは無関係です。文字クラスの中のほとんどの文字は文字通りの対応を意味しますが、例外にはS/Oの回答よりもはるかに説明が必要です。

たとえば、a (b)で成功するわけではありませんが、同じ文で2つの一致が見られる場合は、予期しない結果になります。

現実的な表現のためには、現実的なサンプルデータを提供する必要があります。

例外的リソースは、基礎を学習した後、構文の強調表示、試合のハイライト、試合の内訳、およびトークンのマウスオーバーでツールチップとhttp://regex101.comのようなサイトが提供するリアルタイムのテスト環境で、それは第二のステップを取るための素晴らしい方法です。いくつかの(一般的に使用されている)フレーバーしかサポートしていませんが、成熟したプログラミング/スクリプト言語のほとんどは、正規表現で同じ基本/中間機能を共有しています。

関連する問題