RegExp混乱

Son*_*nia 7 java regex

我是正则表达式的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.compile(regExp)`更有意义,这意味着OP颠倒了编译和匹配器语句,但实际上它是同一个bug. (4认同)
  • 解决它,但名字现在非常误导 (2认同)
  • +1没有答案,但对于"没有有效的防御,以本罪......"我希望更多的同事会到自己的错误,这样的回应. (2认同)

Bri*_*new 8

你没有编译正则表达式.你需要

Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(exp);
Run Code Online (Sandbox Code Playgroud)

即上面的代码混淆了正则表达式和输入字符串.但是,你的实际正则表达式是正确的.


ale*_*nis 5

你的正则表达式非常好.

这个问题是一个事实,即你交换exp,并regExp在你的代码.该函数compile将正则表达式作为参数,而函数matcher将表达式匹配.