Home  >  Article  >  Web Front-end  >  How to use regular expressions in java

How to use regular expressions in java

php中世界最好的语言
php中世界最好的语言Original
2018-03-29 10:54:071377browse

这次给大家带来java中正则表达式的使用方法,java中正则表达式使用的注意事项有哪些,下面就是实战案例,一起来看一下。

判断目标字符串中是否 可能 含这个字符。

假如待匹配字符串包含指定字符串并且匹配正则表达式,则为真,假如待匹配字符串不包含指定字符串但是匹配正则表达式,也为真,假如其他情况为假。

看一段简单的代码示例:

private static String s = "1";
public static void main(String[] args) {
  testOne(s);
}  
private static void testOne(String s){
  System.out.println(s.matches("1?"));
}

这段程序测试的是s中是否包含"1",假如包含则返回true,不包含则返回false。此处运行程序结果得到: true 。

注意此处?的用法不同于contains的用法,contains用于测试字符串中是否包含某个字符串,match后的参数则是整个字符串的正则形式。

可以再做一个简单的测试:

private static String s = "1java";
public static void main(String[] args) {
  testOne(s);
}
private static void testOne(String s){
  System.out.println(s.matches("1?"));
}

此处将待匹配的字符串改成了"1java",运行此程序显示的结果为 false 。此时我们再次稍微修改一下即可:

private static String s = "1java";
public static void main(String[] args) {
  testOne(s);
}
private static void testOne(String s){
  System.out.println(s.matches("1?[a-z]+"));
}

上面的代码修改了了一下match中的参数,此时结果即为 true 。

再来看一个情况

private static String s = "12";
public static void main(String[] args) {
  testOne(s);
}
private static void testOne(String s){
  System.out.println(s.matches("0?\\d+"));
}

此时返回的结果仍为 true ,待匹配字符串中不包含"0",但是后边的表达式"\d+"完全匹配"12"。所以返回true。

2. "\"的作用

转义符

在java中的String使用中,我们知道"\"表示转义符。当我们需要表示

String s="He is a "Monster"";

其中的 " " 不能直接写入字符串中,否则编译器会直接报错。需要经过转义符来转换:

String s="He is a \"Monster\"";

但是在java中的正则表达式中,有时候需要用到"\"来表示一些特定的符号,比如 \d 在正则表达式中表示匹配一位数字,但用到正则表达式中则必须使用 \\ 这样的双反斜杠来表示一个 \ 。也就是说我们在代码中必须写成 \\d 来匹配一个数组,相当于正则表达式中的 \d 。

假如你想在正则表达式中插入一个正常的 \ ,则需要写入 \\\\ 。

private static String s = "\\12";
public static void main(String[] args) {
  testOne(s);
}
private static void testOne(String s){
  System.out.println(s);
  System.out.println(s.contains("\\"));
  System.out.println(s.matches("\\\\?\\d+"));
}

注意看一下这段程序中的表示: s=\12 ,这是我们的待匹配字符串,它包含了一个 \ 和两个数字 12 。 String.contains()方法能匹配字符串,可以使用正常的 \\ 表示方法,但是在String.match()方法中是正则表达式,此时必须使用 \\\\ 来表示一个正常的 \ 方可匹配成功。

3. "+"的作用

一个或多个之前的表达式

前边已经稍微解释过这个字符的作用, \\d 表示匹配一个数字,在后边加上一个"+"则表示匹配一个或多个数字

private static String s = "12345";
public static void main(String[] args) {
  testOne(s);
}
private static void testOne(String s){
  System.out.println(s.matches("\\\\?\\d+"));
}

无论s中包含多少个数字,只要全部是数字即可匹配。假如要匹配 123 则需要用如下表达式:

(123)+

有一种错误写法如下:

123+

这种表示首先匹配12,然后匹配多个3。 代码测试:

private static String s = "1233";
public static void main(String[] args) {
  testOne(s);
}
private static void testOne(String s){
  System.out.println(s.matches("123+"));
}

输出为真,此时就是匹配的12+多个3。

量词

量词表示一个正则表达式在匹配的过程中的模式

  • 贪婪型 一般的匹配模式总是贪婪型的,除非被设置了其他选项。贪婪表达式会为所有可能的匹配来尽可能的匹配,也就是匹配最多的字符串。

  • 勉强型 用问号来制定,勉强表达式会尽可能少的匹配,也就是匹配最少的字符串。

  • 占有型 这种类型是java中特有的

Greedy Type Reluctant Type Possessive Type Description
X? X?? X?+ One or 0 X
X* X*? X*+ 0 or more X
X+ X+? X++ One or more X
X{n} X{n}? X{n}+ Exactly n times X
X{n,} X{n,}? X{n,}+ At least n times X
X{n,m} X{n,m}? X{n,m}+ At least n times, at most m timesX

Characters in regular expressions

Characters

The following table shows some commonly used character representations

##BSpecify the character B\xhhHexadecimal represents the character, 0xhh\uhhhhHexadecimal represents the unicode character 0xhhhh \tTab TAB##\n\r
Example Description
Line feed
Enter
\f Page change
\e Escape

Character classes

The following table lists the character classes commonly used in regular expressions

##.Match any single character[abc] contains any characters in abc, which is equivalent to a[^abc]Any character except abc##[a-zA-Z][abd[1-9]]##\SNon-white space characters (^\s)\dNumber (0-9)\DNon-digit (^0-9)\wWord characters[a-zA-Z0-9]##\W

LogicOperator

Example Description
Any character from a to z or from A to Z
Any character in abd or any character in 1-9, take the union
[a-z&&[hij]] Any h, i, j characters, get the intersection
\s White space characters (space, tab, line feed, form feed and carriage return)
Non-word characters[ ^\w]
Example Description
XY Y follows X
X Y
(X) Capture group

Boundary match character

Example Description
^ Start of a line
$ End of a line
\b Word boundary
\B Non-word boundary
\G End of previous match

一个简单的例子来创建上面表中的正则表达式

private static String s = "java123\nJAVA";//形式为"[a-z]{4}[0-9]{3}\s[A-Z]{4}
public static void main(String[] args) {
  testOne(s);
}
private static void testOne(String s) {
  System.out.println(s);
  System.out.println(s.matches(".+\\s.\\S+"));//测试"."匹配任意字符与空白字符"\s与非空白字符\S"
  System.out.println(s.matches("[a-z]+[1-9]+\\s[A-Z]+"));//测试[a-zA-Z0-9]的任意匹配
  System.out.println(s.matches("[^0-9]+[^a-z]+[^\\S][^a-z]+"));//测试^(非)
  System.out.println(s.matches("[bv[ja]]+[123]+\\s[A-Z&&1JAV]+"));//测试与和或
  System.out.println(s.matches("\\w{4}\\d{3}\\s\\w{4}"));//测试\w词字符与\d数字
  System.out.println(s.matches("\\D{4}\\w{3}\\W\\D{4}"));//测试非词字符\W与非数字\D
}

注释中已经写的相当清楚了,输出结果为:

java123
JAVA
true
true
true
true
true
true

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

正则的元字符和普通字符

用正则表达式替换url参数

The above is the detailed content of How to use regular expressions in java. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn