Which regular expression engine does Java uses?
In a tool like RegexBuddy if I use
[a-z&&[^bc]]
that expression in Java is good but in RegexBuddy it has not been understood.
In fact it reports:
Match a single character present in the list below
[a-z&&[^bc]
- A character in the range between
a
andz
:a-z
- One of the characters
&[^bc
:&&[^bc
- Match the character
]
literally :]
but i want to match a character between a
and z
intersected with a character that is not b
or c
Like most regex flavors, java.util.regex.Pattern
has its own specific features with syntax that may not be fully compatible with others; this includes character class union, intersection and subtraction:
[a-d[m-p]]
:a
throughd
, orm
throughp
:[a-dm-p]
(union)[a-z&&[def]]
:d
,e
, orf
(intersection)[a-z&&[^bc]]
:a
throughz
, except forb
andc
:[ad-z]
(subtraction)
The most important "caveat" of Java regex is that matches
attempts to match a pattern against the whole string. This is atypical of most engines, and can be a source of confusion at times.
Subtraction allows you to define for example "all consonants" in Java as [a-z&&[^aeiou]]
.
This syntax is specific to Java. In XML Schema, .NET, JGSoft and RegexBuddy, it's [a-z-[aeiou]]
. Other flavors may not support this feature at all.