JavaRush /Java 博客 /Random-ZH /Java 中的正则表达式
terranum
第 28 级
Milan

Java 中的正则表达式

已在 Random-ZH 群组中发布
正则表达式正则表达式是一种可以应用于文本(Java 中的字符串)的模式。Java提供了java.util.regex包来匹配正则表达式。正则表达式与 Perl 编程语言非常相似,并且非常容易学习。正则表达式要么与文本(文本的一部分)匹配,要么不匹配。* 如果正则表达式匹配一段文本,那么我们就可以找到它。** 如果正则表达式是复合的,那么我们可以很容易地找出正则表达式的哪一部分与文本的哪一部分匹配。

第一个例子

正则表达式“ [a-z] +”匹配文本中的所有小写字母。 [a-z]表示从az包括在内的任何字符,并且+表示“一个或多个”字符。假设我们提供字符串“code 2 learn javatutorial”。如何在 Java 中执行此操作 首先,您必须创建一个模板:
import java.util.regex.*;
Pattern p = Pattern.compile([a-z]+);
接下来,您必须matcher通过在图表上发送消息来创建文本:
Matcher m = p.matcher(“code 2 learn java tutorial”);
注意:两者 都没有构造函数PatternMatcher我们使用类方法创建它们PatternPattern Class:类对象构成正则表达式的表示。Pattern 类不提供任何公共构造函数。要创建模板,必须首先调用公共静态方法之一,然后该方法返回类的对象Pattern。这些方法采用正则表达式作为参数。 Matcher Class:Finder 对象是一个解释模式并对输入字符串执行匹配操作的引擎。Pattern与类一样,Matcher它没有公共构造函数。您可以通过调用类对象的Matcher方法来获取对象。完成这些步骤后,现在我们有了该类的实例,我们现在可以检查是否找到了该模式,如果找到了,在什么位置等。 如果模式与整个字符串匹配,则返回 true,否则返回 false。 如果模式与字符串的开头匹配,则返回 true,否则返回 false。 如果模式与文本的任何部分匹配,则返回 true。 matcherPatternMatcher m m.matches()m.lookingAt()m.find ()

寻找匹配

成功匹配后,m.start()将返回第一个匹配的字符的索引,m.end()将返回最后一个匹配的字符的索引加一。如果尝试不成功并且没有找到匹配项,m.start()他们m.end()将抛出IllegalStateException
  • 这样RuntimeException你就不必抓住它。
返回最后一个匹配字符的索引加一可能看起来很奇怪m.end(),但这正是大多数String.
  • 例如,“Now is the time“.substring(m.start(), m.end())
将返回相同的字符串。我们看一下代码:
import java.util.regex.*;

public class RegexTest {
    public static void main(String args[]) {
        String pattern = "[a-z]+";
        String text = "code 2 learn java tutorial";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);
        while(m.find()) {
            System.out.print(text.substring(m.start(), m.end()) + "*");
        }
    }
}
Output: code*learn*java*tutorial*

附加方法

如果存在匹配,则:
  • m.replaceFirst(replacement)返回一个新字符串,其中与模式匹配的第一个子字符串将被替换为replacement
  • m.replaceAll(replacement)返回一个新字符串,其中与模式匹配的每个子字符串都将被替换
  • m.find(StartIndex)查找从指定索引开始的下一个匹配项
  • m.reset()重置模板
  • m.reset(NewText)重置取景器,并给它一个新文本(可能是StringStringBufferCharBuffer

正则表达式语法

  • ^匹配行的开头。
  • $匹配字符串的结尾。
  • .匹配除换行符之外的任何单个字符。使用 m 选项可以匹配换行符。
  • [...]匹配括号中的任何单个字符。
  • [^ ...]匹配不在括号中的任何单个字符。
  • \A启动整条生产线。
  • \z整行结束。
  • \Z除最后一行终止符外整行的结尾。
  • re*匹配前面的表达式出现 0 次或多次。
  • re+前一个表达式的一个或多个匹配项。
  • re?将 0 或 1 与前一个表达式的位置匹配。
  • re{n}完全匹配 N 前面的表达式出现的次数。
  • re{n,}匹配前面的表达式出现 N 次或多次。
  • re{n, m}匹配前一个表达式至少出现 n 次、最多出现 m 次。
  • a|b匹配 a 或 b。
  • (re)一组正则表达式并记住找到的文本。
  • (?: re)不记住找到的文本的正则表达式组。
  • (?> re)匹配不返回的独立模式。
  • \w匹配字母和数字 [a-zA-Z_0-9]。
  • \W这些不是字母或数字。
  • \s匹配空格。相当于[\t\n\r\f]。
  • \S不是空白字符。
  • \d匹配数字。相当于[0-9]。
  • \D与数字不匹配。
  • \G匹配上一场比赛的点。
  • \n匹配换行符。
  • \b在单词边界处匹配。
  • \B不在单词边界上匹配。
  • \n, \t, etc.换行符、回车符、制表符等字符。
  • \Q引用 \E 之前的所有字符。
  • \E引用以\Q 开始,结束。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION