在Java正则表达式中,$是一个特殊符号,用于表示一个字符串的结尾。如果一个字符串以$结尾,则可以使用$来匹配该字符串。例如:
String regex = "abc$"; // 匹配以abc结尾的字符串 String str1 = "helloabc"; // 不匹配,因为结尾不是abc String str2 = "abcworld"; // 匹配,因为结尾是abc System.out.println(str1.matches(regex)); // false System.out.println(str2.matches(regex)); // true
需要注意的是,$在正则表达式中也可以表示行尾的位置。当$出现在正则表达式的末尾时,它会匹配一整行的结尾位置。例如:
String regex = "^Hello$"; // 匹配以Hello为一行的结尾的字符串 String str1 = "Hello world"; // 不匹配,因为结尾不是一行的结尾 String str2 = "Hello"; // 匹配,因为Hello就是一行的结尾 System.out.println(str1.matches(regex)); // false System.out.println(str2.matches(regex)); // true
而在正则表达式中,$的另一个常用功能是表示一个捕获组的结束。捕获组是用小括号括起来的一组正则表达式,可以用于提取字符串中的一部分内容。当一个捕获组结束时,可以使用$来引用它。例如:
String regex = "(\\d{3})-(\\d{4})-(\\d{4})"; String str = "我的电话号码是010-1234-5678"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); if (matcher.find()) { System.out.println(matcher.group(1)); // 010 System.out.println(matcher.group(2)); // 1234 System.out.println(matcher.group(3)); // 5678 }
在这个例子中,我们提取了一个电话号码,该号码由三个部分组成,分别是区号、电话号码前四位和电话号码后四位。我们使用了三个捕获组,每个捕获组都使用了小括号括起来。当我们需要引用其中的一个捕获组时,可以使用$加上该捕获组的编号来引用。例如$1表示第一个捕获组,$2表示第二个捕获组,以此类推。执行上述代码,输出结果如下:
010 1234 5678
这是每个捕获组提取出来的内容。