Pattern / Matcher in Java?
I have a specific text in Java and I want to use a template and matcher to extract something from it. This is my program:
public String getItemsByType(String text, String start, String end) {
String patternHolder;
StringBuffer itemLines = new StringBuffer();
patternHolder = start + ".*" + end;
Pattern pattern = Pattern.compile(patternHolder);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
itemLines.append(text.substring(matcher.start(), matcher.end())
+ "\n");
}
return itemLines.toString();
}
This code works completely WHEN if the search text is on one line, for example:
String text = "My name is John and I am 18 years Old";
getItemsByType(text, "My", "John");
immediately extracts the text "My name is John" from the text. However, when my text looks like this:
String text = "My name\nis John\nand I'm\n18 years\nold";
getItemsByType(text, "My", "John");
This does not capture anything, as "Mine" and "John" are on different lines. How can I solve this?
+3
source to share
2 answers
Use this instead:
Pattern.compile(patternHolder, Pattern.DOTALL);
From the javadoc, the flag DOTALL
means:
Turns on dotall mode.
In the mode hitherto, expression. matches any character, including the line terminator. By default, this expression does not match line terminators.
+7
source to share