Java中具有示例的Matcher useTransparentBounds()方法

java.util.regex.Matcher类表示执行各种匹配操作的引擎。此类没有构造函数,可以使用matches()类java.util.regex.Pattern的方法创建/获取此类的对象。

在正则表达式中,lookbehind和lookahead构造用于匹配在某些其他模式之前或之后的特定模式。例如,如果您需要接受5到12个字符的字符串,则正则表达式将为-

"\\A(?=\\w{6,10}\\z)";

默认情况下,匹配器区域的边界对于构造向前看,向后看和边界匹配并不透明,即这些构造不能匹配超出区域边界的输入文本内容-

例子1

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class useTransparentBoundsExample {
   public static void main(String[] args) {
      //正则表达式可以接受6到10个字符
      String regex = "\\A(?=\\w{6,10}\\z)";
      System.out.println("Enter 5 to 12 characters: ");
      String input = new Scanner(System.in).next();
      //创建一个模式对象
      Pattern pattern = Pattern.compile(regex);
      //创建一个Matcher对象
      Matcher matcher = pattern.matcher(input);
      //将区域设置为输入字符串
      matcher.region(0, 4);
      //切换到透明范围
      if(matcher.find()) {
         System.out.println("Match found");
      } else {
         System.out.println("Match not found");
      }
   }
}

输出结果

Enter 5 to 12 characters:
sampleText
Match not found

此类方法的useTransparentBounds()方法接受布尔值,如果将true传递给此方法,则当前匹配器将使用透明范围,如果将false传递给此方法,则将使用非透明范围。

例子2

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
   public static void main(String[] args) {
      //正则表达式可以接受6到10个字符
      String regex = "\\A(?=\\w{6,10}\\z)";
      System.out.println("Enter 5 to 12 characters: ");
      String input = new Scanner(System.in).next();
      //创建一个模式对象
      Pattern pattern = Pattern.compile(regex);
      //创建一个Matcher对象
      Matcher matcher = pattern.matcher(input);
      //将区域设置为输入字符串
      matcher.region(0, 4);
      //切换到透明范围
      matcher = matcher.useTransparentBounds(true);
      if(matcher.find()) {
         System.out.println("Match found");
      } else {
         System.out.println("Match not found");
      }
   }
}

输出结果

Enter 5 to 12 characters:
sampletext
Match found