Java 正则表达式中的元字符
正则表达式代表着Regular Expression。可以使用正则表达式作为API来定义模式以搜索或修改文本。它经常用于指定字符串约束,包括密码和电子邮件验证。一旦你理解了这个术语,就可以使用正则表达式来评估你的正则表达式。
Java正则表达式在java.util.regex包中提供了三个类和一个接口,它们分别是MatchResult接口、Matcher类、Pattern类和PatternSyntaxException类。通过matcher和pattern类提供了Java正则表达式的功能。
Java正则表达式中的元字符
Java正则表达式中的元字符作为常见匹配模式的简码。元字符前面要加反斜杠(\
)。以下列出了所有的元字符:
REGEX | 描述 |
---|---|
. |
任何字符(可以匹配终止符,也可以不匹配) |
\d |
任何数字,等同于 [0-9] |
\D |
任何非数字,等同于 [^0-9] |
\s |
任何空白字符,等同于 [\t\n\x0B\f\r] |
\S |
任何非空白字符,等同于 [^\s] |
\w |
任何单词字符,等同于 [a-zA-Z_0-9] |
\W |
任何非单词字符,等同于 [^\w] |
\b |
单词边界 |
\B |
非单词边界 |
元字符示例
// Java program to demonstrate all the meta characters in Java Regex
import java.io.*;
import java.util.regex.*;
public class example {
public static void main(String[] args) {
// \d- Number
// \D- Non-Digit
// \s- Any whitespace
// \S- Non whitespace Character
// \w- Any word character like numbers/ characters
// \W- Special symbols
System.out.println(Pattern.matches(
"\d\D\s\S\w\W", "1G FG!")); // true
System.out.println(Pattern.matches(
"\d\D\s\S\w\W", "Hello")); // false
}
}
输出
true
false
元字符的解释
数字和非数字元字符 (\d, \D)
示例
// Java program to demonstrate the Digit and Non-Digit related Meta Characters
import java.io.*;
import java.util.regex.*;
public class example {
Public static void main(String[] args) {
// \d represents a digit
// represents a number so return true
System.out.println(Pattern.matches("\d", "2")); // true
// Comparing a number with character so return false
System.out.println(Pattern.matches("\D", "a")); // false
// \D represents non digits
// Comparing a non-digit with character so return
// true
System.out.println(Pattern.matches("\D", "a")); // true
// Comparing a non-digit with a digit so return
// false
System.out.println(Pattern.matches("\D", "2")); // false
}
}
输出
true
false
true
false
解释
d 元字符表示一个从0到9的数字。因此,当我们在这个范围内进行比较时,它返回true,否则返回false。
D 元字符表示一个非数字字符,它接受除数字以外的任何字符。因此,当我们将”D”与任何数字进行比较时,它返回false,否则返回true。
空格和非空格元字符(\s,\S)
示例
// Java program to demonstrate the Whitespace and Non whitespace Meta Characters
import java.io.*;
import java.util.regex.*;
Class example {
public static void main(String[] args) {
// comparing any whitespace character with a white
// space so return else false
System.out.println(Pattern.matches("\s", " ")); // true
System.out.println(Pattern.matches("\s", "2")); // false
// comparing any non-whitespace character with a non
// white space character so return true else false
System.out.println(Pattern.matches("\S", "2")); // true
System.out.println(Pattern.matches("\S", " ")); // false
}
}
输出
true
false
true
false
解释
s代表空白字符,比如空格、制表符、换行等。所以,当我们将”s”与空白字符进行比较时,它会返回true。否则返回false。
S代表非空白字符,接受除空白字符之外的所有字符,所以当我们将”S”与空白字符进行比较时,它会返回false。否则返回true。
单词和非单词元字符(\w, \W)
示例
// Java program to demonstrate the Word and Non-Word Meta Characters
import java.io.*;
import java.util.regex.*;
public class example {
public static void main(String[] args){
// comparing any word character with a word
// character so return true else false
System.out.println(Pattern.matches("\w", "a")); // true
System.out.println(Pattern.matches("\w", "2")); // true
System.out.println(Pattern.matches("\w", "")); // false
// comparing any non-word character with special
// symbols and whitespaces return true else false
System.out.println(Pattern.matches("\W", "2")); // false
System.out.println(Pattern.matches("\W", " ")); // true
System.out.println(Pattern.matches("\W", "")); // true
}
}
输出
true
true
false
false
true
true
解释
w代表一个单词字符,可以接受字母(大写和小写)和数字[0-9]。所以,当我们将“w”与字母或数字进行比较时,它返回true。否则返回false。
W代表一个非单词字符,可以接受除了字母和数字之外的任何字符。所以,当我们将“W”与字母或数字进行比较时,它返回false。否则返回true。
单词和非单词元字符(\b,\B)
示例
// Java program to demonstrate the Word and Non Word boundary Meta Characters
import java.io.*;
import java.util.regex.*;
class example {
public static void main(String[] args) {
// \b says that a string must have boundary letters
// of word characters
System.out.println(Pattern.matches("\bexample\b", "example")); // true
System.out.println(Pattern.matches("\b@example\b", "@example")); // false
// \B says that a string must have non- word characters as boundaries
System.out.println(Pattern.matches("\B@example@\B", "@example@")); //true
System.out.println(Pattern.matches("\Bexample\B", "example")); //false
}
}
输出
true
false
true
false
解释
根据符号b,一个字符串必须具有词字符(例如数字或字母)的边界元素。由于这种情况下的GFG字符串包含了词字母(G,G)作为边界,因此返回true。@GFG
字符串的边界元素为@
,G
,其中@
不是词字符,因此返回false。
B表示字符串的边界元素必须是非词字符;除了数字和字母之外的任何内容都是允许的。由于@GFG@
字符串的边界为@,@是非词字符,因此返回true。GFG字符串的边界元素是G和G,它们都是词字符,因此返回false。
结论
对于寻找或操作文本信息的程序员来说,正则表达式(通常称为regex)提供了一种高效的解决方案。通过在字符串中定义模式,开发人员可以轻松定位所需的内容,甚至修改其外观。Java的正则表达式类位于java.util.regex包中,在使用Java的任何正则表达式方法之前需要导入它。Java正则表达式包含三个类和一个接口,即Pattern、Matcher、PatternSyntaxException和MatchResult接口。