Re: RegEx Help one more time
- From: Jussi Piitulainen <jpiitula@xxxxxxxxxxxxxxxx>
- Date: 24 Feb 2007 19:38:52 +0200
Ken Kast writes:
Here's my pattern:
pattern =
"\\b[A-Z]([A-Z0-9]|[-+_/&.](?=[A-Z0-9])|[(][A-Z0-9]([A-Z0-9]|[-+_/&.](?=[A-Z0-9]))*[)])+\\b";
With the string AB(CDE), it finds only AB(CDE. Why isn't the closing
parens found and why is it accepting the string without it?
I submit the following little program as an example of how you can
study such problems yourself in a kind of experimental way. However,
it doesn't find "AB(CDE", nor do I see how it could when the branch
that matches the opening "(" ends with the closing ")".
To match the closing paren before a word boundary there has to be a
word character immediately after it.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Foo {
public static void main(String [] _) {
String pattern = "\\b[A-Z]("
+ "[A-Z0-9]"
+ "|[-+_/&.](?=[A-Z0-9])"
+ "|[(][A-Z0-9]([A-Z0-9]|[-+_/&.](?=[A-Z0-9]))*[)]"
+ ")+\\b";
String text = "First AB(CDE) ends at a non-word-boundary, "
+ "second GH(IJ)K ends at a word-boundary."
+ "Third LM(NOP)q should be caught.";
Matcher m = Pattern.compile(pattern).matcher(text);
while (m.find()) {
System.out.println(m.group());
}
}
}
.
- References:
- RegEx Help one more time
- From: Ken Kast
- RegEx Help one more time
- Prev by Date: OS X 10.3.9 (or < 10.4) BufferedImage problem
- Next by Date: Re: permutation with repetition
- Previous by thread: RegEx Help one more time
- Next by thread: OS X 10.3.9 (or < 10.4) BufferedImage problem
- Index(es):
Relevant Pages
|