我是正则表达式的Java概念的新手.
任何人都可以告诉我正确的正则表达式,我应该用于下面的字符串 -
String exp = "ABCD_123_abc".
我用于上述字符串的正则表达式是:
regExp = "([a-zA-Z]+)_([0-9]+)_([a-z]+)"
但是下面代码的输出是 "**No Match Found**"
Public static void main()
{
String exp = "ABCD_123_abc";
String regExp = "([a-zA-Z]+)_([0-9]+)_([a-z]+)";
Pattern pattern = Pattern.compile(exp);
Matcher matcher = pattern.matcher(regExp);
if(matcher.matches())
{
System.out.println("Match found");
}
else
{
System.out.println(" NO Match found");
}
}
Run Code Online (Sandbox Code Playgroud)
ppe*_*rka 12
问题是:你不小心交换了正则表达式模式和表达式的使用来检查
String exp = "ABCD_123_abc";
String regExp = "([a-zA-Z]+)_([0-9]+)_([a-z]+)";
Run Code Online (Sandbox Code Playgroud)
应该用
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(exp);
Run Code Online (Sandbox Code Playgroud)
该Pattern.compile(字符串正则表达式)函数接受正则表达式.
编辑
我道歉,我的第一个解决方案确实是永远不会永远做过的事情:变量的名称与他们的价值观的含义相矛盾......这意味着痛苦和眼泪,并被愤怒的同事击中而被大喊在.对这一罪行没有有效的辩护理由 ......
EDIT2 您可以通过Matcher.group(int)函数获取各个匹配的组:
String matchedStringpart matcher.group(2);
Run Code Online (Sandbox Code Playgroud)
注意:我用作2参数:
0 表示输入序列匹配1意味着第一组(ABC在这种情况下)如果你只需要这个123部分,我会为了清晰起见重写正则表达式:
regExp = "[a-zA-Z]+_([0-9]+)_[a-z]+";
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,group()必须调用1,因为现在第一个(也是唯一的)匹配组是第一个:
String matchedStringpart matcher.group(1);
Run Code Online (Sandbox Code Playgroud)
你没有编译正则表达式.你需要
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(exp);
Run Code Online (Sandbox Code Playgroud)
即上面的代码混淆了正则表达式和输入字符串.但是,你的实际正则表达式是正确的.