0

ここではJavaでコーディングしています。

任意の数字または文字列に一致する正規表現が

"(0|[1-9][0-9]*)(\\.[0-9]+)?|[a-zA-Z]+"

しかし、文字または数字以外のもの、つまり次のような記号に一致させたい!, @, +, -

やってみましたがうまくいき[^.. ]ません。

たとえば、逆のことをしたいとしましょう。つまり、数字または文字または @ の文字列を含む文字列のすべての部分を返します。

public ArrayList<String> findMatch(String string){
    ArrayList <String> outputArr = new ArrayList<String>();
    Pattern p = Pattern.compile("(0|[1-9][0-9]*)(\\.[0-9]+)?|[a-zA-Z]+|\\@");
    // recognizes number, string, and @
    Matcher m = p.matcher(string)
    while (m.find()) {
        outputArr.add(m.group());
    }
    return outputArr;
}

上記のコードの反対を見つけたいとしましょう。どうすれば3行目を変更できますか?

4

3 に答える 3

2

あなたはおそらくこれだけを使いたいでしょう:

\W+

これは、次のように定義された「単語文字」ではない任意の文字の文字列と一致します。

[a-zA-Z0-9_]

または「すべての文字、数字、およびアンダースコア」。アンダースコアを含める場合は、次のことを試してください。

[\W_]+

または、明示的にしたい場合は、次のようにします。

[^A-Za-z0-9]+

これは「文字と数字以外のすべて」を意味します。

お役に立てれば。

于 2013-03-13T05:08:21.897 に答える
1

使用できる最も単純な正規表現パターンは次のとおりです。 [^\w]+ これは、数字でもアルファベットでもないすべての特殊文字に一致します。お役に立てれば。これは、サンプルの例を含むサンプルRegex Testerです。ここで正規表現の正確性をテストできます。これがあなたを助けることを願っています。

あなたが提供した例から、私が理解しているのは、アルファベット、数字、および「@」を除くすべての文字が必要なことです。

正規表現では、 「\w」は任意のアルファベット (アンダースコアを含む) と任意の数字に一致します。したがって、「$、#」などの他の記号文字を取得するには、これを否定する必要があります。

以下の式はあなたの問題を解決します = [^\w@]+

「^」は否定記号を表します。ここで'^\w'は、'アルファベットまたは数字以外のすべてに一致' を意味します。無視する必要があるため、式に「@」記号も追加しました。

これがあなたの質問に答えることを願っています。

于 2013-03-13T05:51:36.420 に答える
0

あなたがもう少し詳細を与えることができるならば、あなたの要件は何ですか?そしてあなたは何を期待しますか?それは私が解決策を理解するのに役立ちます。クエリに入力した内容は、特殊文字のみに一致させたいように見えます。私は正しいですか?もしそうなら、あなたはただ試すことができます:

[^A-Za-z0-9][your quantifier here]  
quantifier can be:
? for 0 or 1 frequency
+ for >=1 frequency
* for >=0 frequency 

次のような文字列があるとします

String s="shyuit6785%^7kui!@*&123f#$annds";

//And you want to find out the characters except alphabets and numerals . (I hope its your requirement)
 Pattern p = Pattern.compile("[^A-Za-z0-9@]+");
 Matcher m = p.matcher(s);
 while (m.find())
  {
   System.out.println("Found a required character " + m.group() + " at index number " +m.start());

  }
于 2013-03-13T06:17:25.257 に答える