これらの名前付きグループをそれぞれ別の行に抽出する正規表現を見つけようとしています。さまざまな組み合わせを試しましたが、行き詰まっています。たとえば、 localityDefault を抽出できませんが、次のようになります。
hasData false
patternMatch7() null
public static void main(String[] args) throws Exception {
String patternOfData = ".*?orgUnit1Default=(?<orgUnit1Default>\\S+)\\s+" +
"orgUnit2Default=(?<orgUnit2Default>\\S+)\\s+" +
"organizationDefault=(?<organizationDefault>\\S+)\\s+" +
"localityDefault=(?<localityDefault>\\S+)\\s+?" +
"stateDefault=(?<stateDefault>\\S+)\\s+?" +
"countryDefault=(?<countryDefault>\\S+)\\s+";
String receivedDataString = "orgUnit1Default=window washers \n"
+ "orgUnit2Default=All Cleaners \n"
+ "organizationDefault=Cleaning Dept \n"
+ "localityDefault=Small Town Here\n"
+ "stateDefault=Washington\n"
+ "countryDefault=US";
String toExtractName = "organizationDefault";
System.out.println("patternMatch7() "
+ patternMatch7(patternOfData, receivedDataString,
toExtractName));
}
static String patternMatch7(String patternOfData,
String receivedDataString, String toExtractName) throws IOException {
Pattern dataExtractionPattern;
dataExtractionPattern = Pattern.compile(patternOfData, Pattern.DOTALL);
Matcher matcher = dataExtractionPattern.matcher(receivedDataString);
boolean hasData = false;
String dataValue = null;
if (matcher.find()) {
hasData = true;
dataValue = matcher.group(toExtractName);
}
System.out.println("hasData " + hasData);
return dataValue;
}