java正则表达式接受除none之外的任何单词

时间:2011-12-06 17:18:02

标签: java regex

我需要一个正则表达式来匹配除none之外的任何字符串。  我试过用     regular exp =“^ [^ none] $”, 但它不起作用。

4 个答案:

答案 0 :(得分:1)

您可以使用正则表达式(?!^none$).*。有关详细信息,请参阅此问题:Regex inverse matching on specific string?

"^[^none]$"不起作用的原因是您实际上匹配除字符串“n”,“o”或“e”之外的所有字符串。

当然,像String.equals一样使用!"none".equals(testString)会更容易:{{1}}。

答案 1 :(得分:1)

如果要将String与Java中的特定单词进行匹配,则应使用equals()。在这种情况下,您希望反转匹配,以便您的逻辑变为:

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

资源消耗更少,更直观。

如果您需要匹配包含单词“none”的字符串,您可能正在寻找类似的内容:

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.
}

答案 2 :(得分:0)

实际上这是匹配除“word”之外的所有单词的正则表达式:

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
"

答案 3 :(得分:0)

这是你正在寻找的正则表达式:

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

话虽如此,如果你没有被迫使用匹配除了“none”之外的所有内容的正则表达式,那么更简单,快速,清晰,易于编写和理解的是:

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

然后,您只需排除匹配项。

Matcher m = p.matcher("your string");
System.out.println(s + ": " + (m.matches() ? "NO Match" : "Match"));