Comments (1)
I can reproduce this:
use onig::Regex;
fn main() {
test("Greater|GreaterOrEqual");
test("GreaterOrEqual|Greater");
}
fn test(regex_string: &str) {
let re = Regex::new(regex_string).unwrap();
println!("Regex: {regex_string}");
check(&re, "Greater");
check(&re, "GreaterOrEqual");
}
fn check(regex: &Regex, input: &str) {
let matched = regex.is_match(input);
println!("Input: {input} = {matched}");
}
This seems to be caused by the way that is_match
works. We first match the regex against the text, and then check
that the whole text was matched. In this case the order of the alternation changes what Oniguruma matches. If the
GreaterOrEqual
is first then we match the longer item. if Greater
is first then we only match that. This then means
that the expression hasn't matched the whole input text causing the behaviour you're seeing.
There's an option for Oniguruma
which should allow us to force it to choose the longest match, but setting it either
with (?L)
in the pattern or via RegexOptions::::REGEX_OPTION_FIND_LONGEST
doesn't seem to affect the
outcome.
from rust-onig.
Related Issues (20)
- ?= +velookahead regex did not return intended result. HOT 1
- Installing on CentOS 7 with llvm-7.0 and rust 1.42 fails with `LLVM ERROR: inconsistency in registered CommandLine option` HOT 3
- new release for bindgen update? HOT 1
- Support `onigmo` Backend HOT 1
- Cannot build on wasm32-unknown-unknown target HOT 8
- cargo test segfaulting on i386 HOT 9
- Question about regex replace. HOT 2
- onig has a dependency on onig_sys 69.7.0 in crates HOT 9
- the bindgen used seem to be incompatible with clang-16
- can't build on mac HOT 1
- Bug: `.{0,99}` and `.*` give different results, even without long lines in content HOT 1
- Unexpected `panic`s when `onig` returns an error when searching
- `onig_sys` no longer builds, please make a new release! HOT 1
- unable to build on mac
- Nested alternations don't seem to work
- build failed due to onig C lib
- failed due to undefined reference to onig_new_match_param and onig_free_match_param
- Caret not being treated as literal in rust-onig
- fatal error C1056 happens occasionally when compiling onig-sys/oniguruma/src
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rust-onig.