Java 如何捕获前面有两个、三个或四个字符的11位数字,使用正则表达式,字符可以是一个点
我需要在HTML页面中搜索一系列数字,可能如下所示: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(“]+
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
:literalpf.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
您已经检查了前导字符和/或尾随字符是否是数字,几乎就知道了。只需使用可能的前导序列以相同的方式继续。一些快速帮助、非捕获序列包含在(?:
和)之间。
。