java字符串正则表达式模式匹配和替换字符串
有一个字符串,如果该模式匹配,则只需返回前几个字符java字符串正则表达式模式匹配和替换字符串,java,regex,string,Java,Regex,String,有一个字符串,如果该模式匹配,则只需返回前几个字符 String str = "PM 17/PM 19 - Test String"; 应为返回字符串-->pm17 下面是我的字符串模式检查: 1) 始终以PM开始 2) 然后是空间(或某个时间零空间) 3) 然后后面跟着一些数字 4) 然后是斜杠(即/) 5) 然后后跟相同的字符串PM 6) 然后是空间(或某个时间零空间) 7) 然后是数字 8) 然后是任何其他字符/字符串 如果给定的字符串与上述模式匹配,我需要在斜杠之前获取字符串(即pm
String str = "PM 17/PM 19 - Test String";
应为返回字符串-->pm17
下面是我的字符串模式检查:
1) 始终以PM开始2) 然后是空间(或某个时间零空间)
3) 然后后面跟着一些数字
4) 然后是斜杠(即/)
5) 然后后跟相同的字符串PM
6) 然后是空间(或某个时间零空间)
7) 然后是数字
8) 然后是任何其他字符/字符串 如果给定的字符串与上述模式匹配,我需要在斜杠之前获取字符串(即pm17) 我试过下面的方法,但在这种情况下不起作用
if(str.matches("PM\\s+[0-9.]/PM(.*)")) { //"PM//s+[0-9]/PM(.*)"
str = str.substring(0, str.indexOf("/"));
flag = true;
}
您可以在此处使用带有捕获组的
.replaceFirst
,而不是.matches
:
正则表达式详细信息:
:行开始^
:匹配并分组以(PM\\s*\\d+)
开头的文本,后跟0个或多个空格,后跟1个或多个数字PM
:匹配/PM\\s*\\d+
,后跟0个或多个空格,后跟1个或多个数字/PM
:在行尾前匹配任意字符*$
:是替换,它将捕获的第一组字符串放回替换中$1
如果要在提取子字符串之前进行输入验证,我建议使用以下代码:
final String regex = "(PM\\s*\\d+)/PM\\s*\\d+.*";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(str);
if (matcher.matches()) {
flag = true;
str = matcher.group(1);
}
PM
在正则表达式中不显示。你看到了吗?用PM更正了。下一期:[0-9]
匹配一个数字,而不是多个数字,例如17
/s+
表示“两个前斜杠,文字s
字符重复1到无限次”。你的意思可能是\\s+
试试^PM\s*\d{2}
final String regex = "(PM\\s*\\d+)/PM\\s*\\d+.*";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(str);
if (matcher.matches()) {
flag = true;
str = matcher.group(1);
}