给出:
String text = "FACEBOOK is buying GOOGLE and FACE BOOK";
以及:
Pattern pattern = Pattern.compile("(?<FB>(FACE(\\p{Space}?)BOOK))|(?<GOOGL>(GOOGL(E)?))");
Matcher matcher = pattern.matcher(text);
我想得到这样的东西:
Group=FB matches substring="FACEBOOK" at position=[0, 8)
Group=GOOGL matches substring="GOOGLE" at position=[19, 25)
Group=FB matches substring="FACE BOOK" at position=[30, 39)
但是,我一直无法得到组名。以下是我在Scala中的尝试:
import java.util.regex.Pattern
val pattern = Pattern.compile("(?<FB>(FACE(\\p{Space}?)BOOK))|(?<GOOGL>(GOOGL(E)?))")
val text = "FACEBOOK is buying GOOGLE and FACE BOOK"
val matcher = pattern.matcher(text)
while(matcher.find()) {
println(s"Group=???? matches substring=${matcher.group()} at position=[${matcher.start},${matcher.end})")
}
编辑:有人将此标记为Get group names in java regex的重复,但这是一个不同的问题。这是问给定一个MATCH,如何找到组名。另一个问题是询问如何在给定Pattern对象的情况下将组名变为String(或index)。
3条答案
按热度按时间gfttwv5a1#
您可以使用named-regexp Java库。它是一个围绕
java.util.regex
的瘦 Package 器,支持命名捕获组,主要针对Java-7之前的用户,但它也包含检查组名称的方法(即使在Java 11中也似乎缺少):xqnpmsa82#
以下是我在Scala中的尝试:
zbq4xfa03#
Java 20正在将
namedGroups
方法添加到MatchResult
(Matcher
实现)。在您的示例中,这可以用于获取当前匹配组名称。下面是一个Java实现: