Java Regex应该匹配子字符串,但不能成为结果的一部分



如果存在任何子字符串,但不将其作为结果的一部分,我无法编写匹配的正则表达式。

例如:

3/4 length sleeve
3/4 length sleeves
3/4th length sleeve
3/4 sleeve
3/4 sleeves
3/4th sleeve 
3/4th sleeves

对于以上所有字符串,它应该匹配,但最终在结果中返回"3/4套筒"。

我试着使用前瞻,但在阅读后http://www.regular-expressions.info/lookaround.html我知道为什么它不起作用了。

您不能像尝试的那样使用Positive Lookahead,而是可以将捕获组放在要匹配的内容周围,然后将匹配组连接在一起以获得匹配结果。

String s  = "3/4 length sleeven" +
            "3/4 length sleevesn" +
            "3/4th length sleeven" +
            "3/4 sleeven" +
            "3/4 sleevesn"+
            "3/4th sleeven" +
            "3/4th sleevesn" +
            "long sleevesn" +
            "longfoobarsleeve" +
            "shortnjjgfjghfdjghsleevesn" +
            "shorts sleeveeeesn" +
            "short sleeve";
Pattern p = Pattern.compile("(3/4|long|short).*?(sleeve)");
Matcher m = p.matcher(s);
while (m.find()) {
  System.out.println(m.group(1) + " " + m.group(2));
}

输出

3/4 sleeve
3/4 sleeve
3/4 sleeve
3/4 sleeve
3/4 sleeve
3/4 sleeve
3/4 sleeve
long sleeve
long sleeve
short sleeve
short sleeve
short sleeve
(?=(?:(3/4)(?:th)?s*(sleeve)s?)|(?:(3/4)(?:th)?s*lengths*(sleeve)s?)).*

试试这个。这将匹配所有内容并返回您想要的内容。更换将是

$1 $2$3 $4

只需在最后去掉它们的空间。

请参阅演示。

http://regex101.com/r/lU7jH1/3

最新更新