2011-12-06 9 views
1

none以外の文字列に一致する正規表現が必要です。 私は使ってみました regular exp = "^ [^ none] $"、 しかし動作しません。java regexが、他の単語を受け入れないようにする

+0

"none '以外の意味ですか?もしそうなら、なぜ 'none'にマッチして結果を否定するのでしょうか? –

+0

文字列が "none"の場合にのみ失敗しますか? – FailedDev

答えて

1

正規表現(?!^none$).*を使用できます。 Regex inverse matching on specific string?

"^[^none]$"という理由が機能しないのは、文字列 "n"、 "o"、または "e"以外のすべての文字列と実際に一致しているためです。

もちろん、String.equalsを使用するほうが簡単です(!"none".equals(testString))。

+0

正規表現 "^(?! none)。+ $"はそれにもかかわらず文字列を受け入れません。正規表現は何も受け入れてはいけません。それは他のすべての言葉を受け入れるべきです。表現を変更するにはどうすればよいですか? – user679526

+0

@ user679526私は今それを得た。 '^(none!)。+ $'は "none"で始まらない単語にマッチします。正規表現 '(?!^ none $)。*'で私の答えを編集しました。これは "none"以外のすべての文字列と一致するはずです。 –

1

StringをJavaの特定の単語と照合する場合は、equals()を使用する必要があります。この場合、論理が一致するように一致を反転させたいとします。

if(!theString.equals("none")) { 
    // do stuff here 
} 

飢えているリソースがずっと少なく、はるかに直感的です。

あなたは単語「なし」を含む文字列を一致させる必要がある場合、あなたはおそらくのようなものを探しています:

if(theString.matches("\\bnone\\b")) { 
    /* matches theString if the substring "none" is enclosed between 
    * “word boundaries”, so it will not match for example: "nonetheless" 
    */ 
} 

それとも、「単語の境界」は、特定の区切り文字を意味することをかなり確信で​​きる場合あなたはまだindexOf()メソッドを使用して正規表現を回避することができます

int i = theString.indexOf("none"); 
if(i > -1) { 
    if(i > 0) { 
     // check theString.charAt(i - 1) to see if it is a word boundary 
     // e.g.: whitespace 
    } 
    // the 4 is because of the fact that "none" is 4 characters long. 
    if((theString.length() - i - 4) > 0) { 
     // check theString.charAt(i + 4) to see if it is a word boundary 
     // e.g.: whitespace 
    } 
} 
else { 
    // not found. 
} 
0

実はこれは「言葉」を除くすべての単語にマッチする正規表現です:

Pattern regex = Pattern.compile("\\b(?!word\\b)\\w+\\b"); 
Matcher regexMatcher = regex.matcher(subjectString); 
while (regexMatcher.find()) { 
    // matched text: regexMatcher.group() 
    // match start: regexMatcher.start() 
    // match end: regexMatcher.end() 
} 

「単語」が他の単語に含まれないように単語境界を使用する必要があります。

説明:これは、あなたが探している正規表現である

" 
\b   # Assert position at a word boundary 
(?!   # Assert that it is impossible to match the regex below starting at this position (negative lookahead) 
    Lorem  # Match the characters “Lorem” literally 
    \b   # Assert position at a word boundary 
) 
\w   # Match a single character that is a “word character” (letters, digits, etc.) 
    +   # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
\b   # Assert position at a word boundary 
" 
0

:あなたはすべてのものが、「どれも一致しない正規表現を使用するように強制されていない場合

Pattern p = Pattern.compile("^(?!none$).*$"); 
Matcher m = p.matcher("your string"); 
System.out.println(s + ": " + (m.matches() ? "Match" : "NO Match")); 

はそれは、言いました"よりシンプルで、速く、はっきりしていて、書くことと理解しやすいです:

Pattern p = Pattern.compile("^none$"); 

次に、マッチを除外します。

Matcher m = p.matcher("your string"); 
System.out.println(s + ": " + (m.matches() ? "NO Match" : "Match")); 
関連する問題