正则表达式在第一个下划线之前和之后找到所有字符,然后确保它们是相同的

时间:2015-11-24 15:44:05

标签: java regex matcher

我有这两个字符串

2014_UMW
2014_UMW_web

我需要写一个正则表达式来获得第一个下划线之前和之后的角色。然后我需要确保它们都是一样的。我正在检查以确保2014_UMW位于两个字符串的开头。 2014_UMW只是一个例子。它可以是2015_YYY2015_YYY_web等。

这是正在使用(?<=_)[^_]+(?=_)的正则表达式,然后我使用模式和匹配器方法来查看它们是否相同,但它不能正常工作。我也试过这个正则表达式[a-zA-Z_0-9]+[^_]+(?=_)

2 个答案:

答案 0 :(得分:0)

要在第一个_之后获取该部分,您可以使用此正则表达式:

Pattern p = Pattern.compile("^[^_]+_([^_]+)");

并使用matcher.group(1)为您感兴趣的部分获取被捕获的组#1。

RegEx Demo

答案 1 :(得分:0)

您说您正在使用的模式(?<=_)[^_]+(?=_)匹配除'_'以外的非空字符序列,每个字符由下划线限定。这与你在[第一个]下划线之前和之后获得角色的意图完全不同。

从您的示例中,我认为您要做的是将字符串拆分为下划线,并比较每个字符串的前两个段。在这种情况下,您可以考虑使用String.split()。细节可能会有所不同,具体取决于您想要如何表征拆分,但这可能是一种简单的方式:

String[] parts1 = string1.split("_");
String[] parts2 = string2.split("_");
// compare elements of parts1 and parts2

或者,如果你想使用正则表达式捕获这样一个字符串的前两个部分,那么你需要Pattern这些行:

Pattern p = Pattern.compile("^([^_]+)_([^_]+)(?:_.*)?");

(该表单适用于Matcher.matches()Matcher.find()Matcher.lookingAt()中的任何一种;如果您只想支持后两种中的一种或两种,则可以使用更简单的表单。 )同样,所需模式的细节可能会根据您所追求的内容而有所不同。