java 正则表达式 例子_正则表达式 JAVA 示例

定义:

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

要点

1.正则是匹配模式,要么匹配字符,要么匹配位置。

2.在正则中可以使用括号捕获数据,要么在API中进行分组引用,要么在正则里进行反向引用。

正则表达式在JAVA中的应用:

Java 正则表达式和 Perl 的是最为相似的。

java.util.regex 包主要包括以下三个类:

Pattern 类:

pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

Matcher 类:

Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

PatternSyntaxException:

PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

在JAVA中的基础运用

1:捕获数组

2:查询方法

3:替换方法

常被用到的正则表达式

1:如何从字符串中提取数字

在JAVA中, \d表示(0-9)范围的数字.尽量使用正则表达式可以使

请注意\ d中的第一个反斜杠.如果您在字符串文本中使用预定义字符(特殊字符),则必须在反斜杠之前加上另一个反斜杠,以便转义该字符串。 这就是为什么我们需要使用\d

List numbers = new LinkedList();

Pattern p = Pattern.compile("\\d+");

Matcher m = p.matcher(str);

while (m.find()) {

numbers.add(Integer.parseInt(m.group()));

}

2:如何根据换行来拆分字符串

根据不同的系统,至少有如下3中换行分隔符

\r represents CR (Carriage Return), which is used in Unix

\n means LF (Line Feed), used in Mac OS

\r\n means CR + LF, used in Windows

String lines[] = String.split("\\r?\\n");

String.split("[\\r\\n]+")

String.split(System.getProperty("line.separator"));

Pattern.compile()的重要性

Pattern.compile()方法是创建Pattern对象实例的唯一方法。一般如下使用

//创建Pattern对象

Pattern p = Pattern.compile("a*b");

//创建Matcher对象

Matcher matcher = p.matcher("aaaaab");

//判断是否匹配

assert matcher.matches() == true;

//-----Patternd对象实例p只需创建一次,可以多少使用,匹配不同的Matcher-----------

Matcher anotherMatcher = p.matcher("aab");

assert anotherMatcher.matches() == true;

//-----------Pattern.matches 只能使用一次--------------------------------------------------

boolean b = Pattern.matches("a*b", "aaaaab");

文本类容如果使用表达式

一般使用斜杠""来转译,但在字符串内容时,有些麻烦别扭,这时我么可以使用如下方法,来避免 \

math?formula=5%20or%20%5B]5的写法。

Pattern.quote("$5");

//不使用 \\$5 or [$]5

String.split()的分隔字符串为什么需要先转译

因为在JAVA表达式中支持分隔符,如字符“|”,在JAVA中没有区分开来,

A|B的意思是A或者B,要把斜杠“|”表示成字母,则需要转译

需要在字符“|” 之前添加斜杠 \, 如下 \\|

JAVA表达式如果匹配重复出现n次的情况

如: ab, aabb, and aaabbb

Pattern p = Pattern.compile("(?x)(?:a(?= a*(\\1?+b)))+\\1");

// true

System.out.println(p.matcher("aaabbb").matches());

// false

System.out.println(p.matcher("aaaabbb").matches());

// false

System.out.println(p.matcher("aaabbbb").matches());

// false

System.out.println(p.matcher("caaabbb").matches());

7:如果用单个空格替换2个及以上的空格,及删除最前面空格?

String line = " aa bbbbb ccc d ";

// " aa bbbbb ccc d "

System.out.println(line.replaceAll("[\\s]+", " "));

8:如判断一个素数

public static void main(String[] args) {

// false

System.out.println(prime(1));

// true

System.out.println(prime(2));

// true

System.out.println(prime(3));

// true

System.out.println(prime(5));

// false

System.out.println(prime(8));

// true

System.out.println(prime(13));

// false

System.out.println(prime(14));

// false

System.out.println(prime(15));

}

public static boolean prime(int n) {

return !new String(new char[n]).matches(".?|(..+?)\\1+");

}

9:如何用分隔符分割一个字符串,并忽略逗号。

public static void main(String[] args) {

String line = "aaa,bbb,\"c,c\",dd;dd,\"e,e";

List toks = splitComma(line);

for (String t : toks) {

System.out.println("> " + t);

}

}

private static List splitComma(String str) {

int start = 0;

List toks = new ArrayList();

boolean withinQuote = false;

for (int end = 0; end < str.length(); end++) {

char c = str.charAt(end);

switch(c) {

case ',':

if (!withinQuote) {

toks.add(str.substring(start, end));

start = end + 1;

}

break;

case '\"':

withinQuote = !withinQuote;

break;

}

}

if (start < str.length()) {

toks.add(str.substring(start));

}

return toks;

}

找到重复的内容

String str = "123456";

Pattern p = Pattern.compile("(\\d\\d\\d)\\1");

Matcher m = p.matcher(str);

System.out.println(m.groupCount());

while (m.find()) {

String word = m.group();

System.out.println(word + " " + m.start() + " " + m.end());

}

找到重复一次的单词

String pattern = "\\b(\\w+)\\b[\\w\\W]*\\b\\1\\b";

Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);

String phrase = "unique is not duplicate but unique, Duplicate is duplicate.";

Matcher m = p.matcher(phrase);

while (m.find()) {

String val = m.group();

System.out.println("Matching subsequence is \"" + val + "\"");

System.out.println("Duplicate word: " + m.group(1) + "\n");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值