Java 如何捕获前面有两个、三个或四个字符的11位数字,使用正则表达式,字符可以是一个点

Java 如何捕获前面有两个、三个或四个字符的11位数字,使用正则表达式,字符可以是一个点,java,regex,Java,Regex,我需要在HTML页面中搜索一系列数字,可能如下所示: p.fg 67389109321或pfg 67389109321或p.f 67389109321 解析HTML页面后,我将其转换为字符串: String Pagestring = Page.toString().toLowerCase().replaceAll(" <[^>]+>",""); String Pagestring=Page.toString().toLowerCase().replaceAll(“]+

我需要在HTML页面中搜索一系列数字,可能如下所示:

p.fg 67389109321
pfg 67389109321
p.f 67389109321

解析HTML页面后,我将其转换为字符串:

 String  Pagestring  = Page.toString().toLowerCase().replaceAll("  <[^>]+>","");
String Pagestring=Page.toString().toLowerCase().replaceAll(“]+>”,“”);
并使用此正则表达式捕获11位数字:

final Matcher m = Pattern.compile(("(?<!\\d)\\d{11}(?!\\d)")).matcher(Page );
(p\.fg|pfg|p\.f) \d{11}

final Matcher m=Pattern.compile((“(?直截了当:定义可能的开头并用“或”(
|
)分隔),然后选择11位数字:

final Matcher m = Pattern.compile(("(?<!\\d)\\d{11}(?!\\d)")).matcher(Page );
(p\.fg|pfg|p\.f) \d{11}
这意味着:

  • :or操作的分隔符
  • p\.fg
    :literal
    pf.g
  • |
    :或
  • pfg
    :文字
    pfg
  • |
    :或
  • p\.f
    :文字
    p.f
  • :or操作的分隔符
  • :文本空间
  • \d{11}
    :11位数字

也就是说,以您的方式删除HTML标记(
replaceAll(“]+>”,“);
)是不可靠的。请使用特定于HTML的工具,如。该正则表达式可能会在类似HTML的情况下失败

<tag attribute=">"/>

正则表达式

详情:

  • (?:)
    非捕获组
  • |
  • \s
    匹配任何空白字符
Java代码

String string = "p.fg 67389109321 or  pfg 67389109321 or  p.f 67389109321";
Matcher matches = Pattern.compile("p(?:\\.?fg|\\.f)\\s\\d{11}").matcher(string);
while (matches.find()) {
    System.out.println(matches.group(0));
}
输出:

p.fg 67389109321
pfg 67389109321
p.f 67389109321

您已经检查了前导字符和/或尾随字符是否是数字,几乎就知道了。只需使用可能的前导序列以相同的方式继续。一些快速帮助、非捕获序列包含在
(?:
)之间。