Matching Line Boundaries in a Regular Expression

By default, the beginning-of-line matcher (^) and end-of-line matcher ($) do not match at line boundaries. They match the beginning and end of the entire input sequence. For example, the pattern ^a matches abc but does not match def\nabc. To enable ^ and $ to match line boundaries, the pattern should be compiled with the multiline flag enabled.

It is also possible to enable multiline mode within a pattern using the inline modifier (?m). For example, multiline mode is enabled in the pattern (?m)^a. Multiline mode can be disabled using (?-m).

CharSequence inputStr = "abc\ndef";
String patternStr = "abc$";

// Compile with multiline enabled
Pattern pattern = Pattern.compile(patternStr, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.find();    // true

// Use an inline modifier to enable multiline mode
matchFound = pattern.matches(".*abc$.*", "abc\r\ndef");     // false
matchFound = pattern.matches("(?m).*abc$.*", "abc\r\ndef"); // true

Comments

21 Jun 2010 - 8:30pm by Anonymous (not verified)

哦哦,这东西写得好像还行。(就是不知你看的懂我所写的不?)

9 Jul 2010 - 10:47pm by Pranay (not verified)

what does "abc$.*" mean ?

24 Feb 2011 - 6:37pm by Anonymous (not verified)

fds k;ljgiadrnkfndsakj ewra

31 Oct 2011 - 2:27am by joanebaby (not verified)

Good post!

Post a comment

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image. Ignore spaces and be careful about upper and lower case.