Java正则表达式模式是一种用于搜索、替换和操作字符串的强大工具。它可以帮助我们快速地执行复杂的文本处理任务,而不需要写大量的代码。
Java正则表达式模式包含了一些特定的字符,这些字符可以用来表达一个或多个字符的搜索模式。这些特定字符包括:
. 匹配除“\n”之外的任何单个字符 * 匹配前面的子表达式零次或多次 + 匹配前面的子表达式一次或多次 ? 匹配前面的子表达式零次或一次(最多一次) [...] 字符集合。匹配所包含的任意一个字符 [^...] 非字符集合。匹配未包含的任意字符 \s 匹配任何不可见字符,相当于 [\t\n\f\r] \S 匹配任何可见字符,相当于 [^ \t\n\f\r] \d 数字:[0-9] 等效于 [0123456789] \D 非数字:[^0-9] 等效于 [^0123456789]
包 java.util.regex
包含三个类,以支持正则表达式的完整版本。
Pattern
保存正则表达式的编译形式。
Matcher
将要匹配的字符串与模式相关联,并执行实际匹配。
PatternSyntaxException
表示格式错误的正则表达式中的错误。
没有公共构造函数的模式是不可变的,可以共享。
Pattern
类包含一个静态compile()方法,它返回一个 Pattern
对象。
compile()
方法是重载的。
static Pattern compile(String regex) static Pattern compile(String regex, int flags)
以下代码将正则表达式编译为Pattern对象:
import java.util.regex.Pattern; public class Main { public static void main(String[] args) { // Prepare a regular expression String regex = "[a-z]@."; // Compile the regular expression into a Pattern object Pattern p = Pattern.compile(regex); } }
compile()方法的第二个版本设置修改模式匹配方式的标志。
flags参数是一个位掩码,并在Pattern类中定义为int常量。
Flag | 描述 |
---|---|
Pattern.CANON_EQ | 启用规范等效。 |
Pattern.CASE_INSENSITIVE | 启用不区分大小写的匹配。 |
Pattern.COMMENTS | 启用不区分大小写的匹配。... |
Pattern.DOTALL | 允许在模式中的空格和注释。 忽略以#开头的空格和嵌入的注释,直到行的结尾。 |
Pattern.LITERAL | 启用模式的文字解析。 这个标志使元字符和转义序列作为正常字符。 |
Pattern.MULTILINE | 启用多行模式。 默认情况下,^和$匹配输入序列的开始和结束。 此标志使模式仅逐行匹配或输入序列的末尾。 |
Pattern.UNICODE_CASE | 启用支持Unicode的大小写。 与CASE_INSENSITIVE标志一起,可以根据Unicode标准执行不区分大小写的匹配。 |
Pattern.UNICODE_ CHARACTER_CLASS | 启用预定义字符类和POSIX字符类的Unicode版本。 设置此标志时,预定义字符类和POSIX字符类符合Unicode技术标准。 |
Pattern.UNIX_LINES | 启用Unix行模式。 设置此标志时,只有 n字符被识别为行终止符。 |
以下代码编译设置CASE_INSENSTIVE和DOTALL标志的正则表达式。
import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String regex = "[a-z]@."; Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE|Pattern.DOTALL); } }
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String args[]) { Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE); String candidateString = "Java. java JAVA jAVA"; Matcher matcher = p.matcher(candidateString); // display the latter match System.out.println(candidateString); matcher.find(11); System.out.println(matcher.group()); // display the earlier match System.out.println(candidateString); matcher.find(0); System.out.println(matcher.group()); } }
上面的代码生成以下结果。
Java格式 -Java日期格式模式SimpleDateFormat日期和时间格式由日期和时间模式字符串指定。在格式字符串中,从“A到“Z和从“a到...
Java线程教程 -Java当前线程一个语句可以由不同的线程在不同的时间执行。Thread类静态方法currentThread()返回调用此方法的Threa...
Java线程教程 -Java线程组线程总是线程组的成员。默认情况下,线程的线程组是其创建者线程的组。Java程序中的线程组由java.lang....
Java线程教程 -Java执行器框架提供了一种将任务提交与任务执行分离的方法。java.util.concurrent包中的Executor接口是执行器框架...