如果存在任何子字符串,但不将其作为结果的一部分,我无法编写匹配的正则表达式。
例如:
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