首页 > 编程知识 正文

java正则表达式匹配点,java中正则表达式使用

时间:2023-05-06 15:56:04 阅读:173369 作者:2980

与Java正则表达式相关的所有类都包含在java.util.regex中,一般主要使用两个类: java.util.regex.Pattern和java.util.regex.Matcher Pattern对应于正则表达式,Pattern与String对象相关联,并生成与Pattern在String中的匹配项相对应的Matcher。 调用Matcher对象的find ()方法时,Matcher对象将更新为下一个匹配信息。 示例: pattern pattern=pattern.com pile (((d {4}- d{2}-) (d {2} ) ) ) );

string string=' 2010-12-202011-02-14 ';

matcher matcher=pattern.matcher (string );

wile(Matcher.find ) () ) ) ) )。

system.out.println (matcher.group (0) );

}

阿滕

Pattern是Java语言的正则表达式对象。 要使用正则表达式,必须首先从字符串“编译”Pattern对象。 这需要pattern.compile(stringregex )方法。 pattern pattern=pattern.com pile (a.b );

要指定匹配模式,请在表达式中输入"? modifier (限定符是Pattern pattern=Pattern.compile ) '? I ) a.b );

pattern pattern=pattern.com pile (a.b (,Pattern.CASE_INSENSITIVE ) );

要同时指定多个模式,请继续写模式修饰符,或者直接用|运算符连接预定义的常量。 以下两个Pattern对象也是等效的。 Pattern pattern=Pattern.compile ('? is ) a.b );

pattern pattern=pattern.com pile (a.b ),pattern.case _ insensitive|pattern.dotall );

介绍Pattern的主要成员方法。

1.staticbooleanmatches (string regex.charsequenceinput ) )。

通过这种方法,可以验证字符串input是否与正则表达式regex匹配。 因为是静态方法,所以不需要编译生成各个对象,可以方便地使用。 应该注意的是“整个字符串在表达式中是否匹配”,而不是“表达式在字符串中是否匹配”。 您可以认为,regex的结尾自动添加了将字符串的开始位置和结束位置匹配的A和z。 Pattern.Matches(((d{6},) a123456 ); //false

Pattern.Matches (() )、(123456 ) ); //true

2.string [ ] split (charsequencetext ) )。

通常,Pattern对象必须与下面介绍的Matcher配合使用才能完成常规操作。 如果只使用正则表达式拆分字符串,则可以只使用Pattern的这种方法。

此方法接收的参数类型为CharSequence。 你可能不知道,实际上是String的父类,其他子类有CharBuffer、StringBuffer和StringBuilder。 因此,它可以对应于表示各种常见“字符串”的类。 以下代码仅以String为例。 String s='2010-12-20 ';

pattern pattern=pattern.com pile ('s ' );

stringpart : pattern.split (s ) ) }

system.out.println(part );

}

3.string [ ] split (charsequencetext,int limit ) )。

此方法与上面的方法类似,但添加了参数limit,以限制返回的字符串数组的最大长度。 也就是说,规定字符串最多只能“切”一次limit-1次。 如果不需要增加字符串的大小,请尽可能多地进行分隔,然后使用此方法。 String s=' 2010-12-20 ';

pattern pattern=pattern.com pile ('s ' );

(stringpart : pattern.split (s,2 ) )。

system.out.println(part );

}

因为limit是int型的,所以可以自然地设定为各种各样的值。 下表总结了limit对每个取值区间结果的影响。 (如果未指定limit,则最终返回包含n个元素的数组,实际可拆分的次数为n-1 ) )的结果

如果limit 0未设置limit,则保留末尾的空字符串

limit=0未设定limit时,间隔n-1次,忽略末尾的空字符串

0 < limit < n返回数组包含limit个元素,切分limit-1次,最后一个元素是第limit-1次切分后,右侧剩下的所有文本

limit >= n等于未指定limit时

4. static String quote(String text)

这个方法用来取消字符串text中所有转义字符的特殊含义,实质就是在字符串首尾添加 Q 和 E。通常,如果需要把某个字符串作为没有任何特殊意义的正则表达式(比如从外界读入的字符串,用在某个复杂的正则表达式中),就可以使用这个方法:"aacb".matches("a*.b"); //true

"a*.b".matches("a*.b"); //false

"a*.b".matches("a*.b"); //false

"a*.b".matches(Pattern.quote("a*.b")); //true

Matcher

Matcher可以理解为“某次具体匹配的结果对象”:把编译好的Pattern对象“应用”到某个String对象上,就获得了作为“本次匹配结果”的Matcher对象。之后,就可以通过它获得关于匹配的信息。Pattern pattern = Pattern.compile("\d{4}-\d{2}-\d{2}");

Matcher matcher = pattern.matcher("2010-12-20 2011-02-14");

while(matcher.find()){

System.out.println(matcher.group());

}

对编译好的Pattern对象调用matcher(String text)方法,传入要匹配的字符串text,就得到了Matcher对象,每次调用一次find()方法,如果返回true,就表示“找到一个匹配”,此时可以通过下面的若干方法获得关于本次匹配的信息。

1. String group(int n)

返回当前匹配中第n对捕获括号捕获的文本,如果n为0,则取匹配的全部内容;如果n小于0或者大于最大分组编号数,则报错。

2. String group()

返回当前匹配的全部文本,相当于group(0)。

3. int groupCount()

返回此Matcher对应Pattern对象中包含的捕获分组数目,编号为0的默认分组不计在内。

4. int start(n)

返回当前匹配中第n对捕获括号匹配的文本在原字符串中的起始位置。

5. int start()

返回当前匹配的文本在原字符串中的起始位置,相当于start(0)。

6. int end(n)

返回当前匹配中第n对捕获括号匹配的文本在原字符串中的结束位置。

7. int end()

返回当前匹配的文本在原字符串中的结果位置,相当于end(0)。

8. String replaceAll(String replacement)

如果进行正则表达式替换,一般用到的是Matcher的replaceAll()方法,它会将原有文本中正则表达式能匹配的所有文本替换为replaceement字符串。

String

许多时候只需要临时使用某个正则表达式,而不需要重复使用,这时候每次都生成Pattern对象和Matcher对象再操作显得很烦琐。所以,Java的String类提供了正则表达式操作的静态成员方法,只需要String对象就可以执行正则表达式操作。

1.boolean matches(String regex)

这个方法判断当前的string对象能否由正则表达式regex匹配。请注意,这里的“匹配”指的并不是regex能否在String内找到匹配,而是指regex匹配整个String对象,因此非常适合用来做数据校验。"123456".matches("\d{6}"); //true

"a123456".matches("\d{6}"); //true

2.String replaceFirst(String regex,String replacement)

这个方法用来替换正则表达式regex在字符串中第一次能匹配的文本,可以在replacement字符串中用$num引用regex中对应捕获分组匹配的文本。"2010-12-20 2011-02-14".replaceFirst("(\d{4})-(\d{2})-(\d{2})","$2/$3/$1");

3. String replaceAll(String regex,String replacement)

这个方法用来进行所有的替换,它的结果等同于Matcher类的replaceAll()方法,replacement字符串中也可以用$num的表示法引用regex中对应捕获分组匹配的文本。"2010-12-20 2011-02-14".replaceAll("(\d{4})-(\d{2})-(\d{2})","$2/$3/$1");

4. String[] split(String regex)

这个方法等价于Pattern中对应的split()方法,此处不再赘述。

5. String[] split(String regex,int limit)

这个方法等价于Pattern中对应的split()方法,此处不再赘述。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。