我需要一个正则表达式来匹配除none之外的任何字符串。 我试过用 regular exp =“^ [^ none] $”, 但它不起作用。
答案 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"));