How to reverse regular expression in Java? For example, 'ab.+de' => 'ed.+ba'.
相关问题
- Delete Messages from a Topic in Apache Kafka
- Jackson Deserialization not calling deserialize on
- How to maintain order of key-value in DataFrame sa
- StackExchange API - Deserialize Date in JSON Respo
- Difference between Types.INTEGER and Types.NULL in
Tiago Peczenyj is correct and both back references, capturing groups and named groups need to be handled. Named groups because there is no limitation in Java RegEx that a named group needs to be back referenced by name, it can be back referenced by number like any other capturing group.
If anyone is interested in a Java solution, I implemented a library to do just that. https://github.com/vsch/reverse-regex.
Handles all valid Java regex constructs and provides utility classes to wrap pattern, matcher and input for reverse searches to handle all need mappings and reversals.
It would actually be much easier to reverse the haystack than the needle. And since
Matcher
takes aCharSequence
instead of aString
, you can do so with trivial overhead by simply wrapping theString
(see the answers to Reverse a string in Java, in O(1)?).With this knowledge, you can create an alternate version of
Matcher
that can appear to be reversing the pattern, but is really just reversing the input.wow.
You need to build a parser for regular expression and reverse all of the tokens/parts.
in this case
ab.+de is
a , b, .+ , d , e
and reverse this is
e, d, .+, b, a
now imagine groups
((ab)(.+de))
the reverse is
((ed.+)(ba))