Java 正则表达式匹配2还是不匹配?

Java 正则表达式匹配2还是不匹配?,java,regex,regex-group,Java,Regex,Regex Group,我使用这个正则表达式来确定行是否包含两个下划线: \s*_{2}(\w+) 任何空格、两个下划线和一个单词。事实证明,我也需要知道,因为根本没有下划线,所以我有: \s*(\w+) 后跟单词的可选空格。然后我得到第一组,这是我的话。到目前为止还不错 问题是,当使用两个下划线时所采取的操作与不使用下划线时的代码几乎相同,只是我使用了一个标志 if( s =~ uderscore ) { takeGroup( 1 ) yada yada flag = true } else

我使用这个正则表达式来确定行是否包含两个下划线:

\s*_{2}(\w+)
任何空格、两个下划线和一个单词。事实证明,我也需要知道,因为根本没有下划线,所以我有:

\s*(\w+)
后跟单词的可选空格。然后我得到第一组,这是我的话。到目前为止还不错

问题是,当使用两个下划线时所采取的操作与不使用下划线时的代码几乎相同,只是我使用了一个标志

if( s =~ uderscore ) { 
   takeGroup( 1 )
   yada yada 
   flag = true
} else if( s =~ noUnderscore { 
  takeGroup( 1 ) 
  yada yada 
   flag = false 
}

我认为一定有更好的方法,而不是复制整个regexp和带有out和不带out的测试

改用此正则表达式:

\s*(_{2})?(\w+)

然后简单地测试第一组的存在——如果它存在,下划线就存在。原来的组1将变成组2。

使用此正则表达式:

\s*(_{2})?(\w+)
\s*(__)?(\w+)
然后简单地测试第一组的存在——如果它存在,下划线就存在。原来的第一组将变成第二组

\s*(__)?(\w+)
__??是由两个下划线组成的可选组。请注意,单词现在将位于第2组,而不是第1组。如果不想更改组编号,可以使用非捕获组?:_u


__??是由两个下划线组成的可选组。请注意,单词现在将位于第2组,而不是第1组。您可以使用非捕获组?:uuu,如果您不想更改组编号,则可以使用。

啊,是的,这是我在分组时忘记提及的另一个问题,编号已更改。因此,我必须添加额外的检查,以了解是否有2或3组,并相应地幻灯片?什么是非捕获组?因为我需要知道如何升起旗帜,但如果我能帮助的话,我不想改变所有的数字:使用非捕获组和根本不设置组之间有什么区别?组可以使下划线一起可选如果你只是这样做,那么只有第二个下划线是可选的。啊,是的,这是我的另一个问题,我分组时忘了提,号码变了。因此,我必须添加额外的检查,以了解是否有2或3组,并相应地幻灯片?什么是非捕获组?因为我需要知道如何提升标志,但如果我能帮助的话,我不想改变所有的数字:p使用非捕获组和根本不设置组之间有什么区别?如果您只是这样做,组将能够使下划线一起可选?,那么只有第二个下划线是可选的。如果不存在,至少在我的测试中更正第一个组是空的。如果不存在,至少在我的测试中更正第一个组是空的。\s*{2}?\w+应该为您这样做。我想这里的问题将是知道我是否需要升起标志。\s*{2}?\w+应该为你做这件事。我想这里的问题是我是否需要升旗。