mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-31 13:07:46 +00:00
expr: Allow initial asterisk in regular expressions
GNU expr appears to treat this as a literal asterisk
This commit is contained in:
parent
6a7df7d6c1
commit
fa0bd722b7
1 changed files with 17 additions and 1 deletions
|
@ -140,7 +140,8 @@ impl StringOp {
|
|||
let left = left.eval()?.eval_as_string();
|
||||
let right = right.eval()?.eval_as_string();
|
||||
validate_regex(&right)?;
|
||||
let re_string = format!("^{right}");
|
||||
let prefix = if right.starts_with('*') { r"^\" } else { "^" };
|
||||
let re_string = format!("{prefix}{right}");
|
||||
let re = Regex::with_options(
|
||||
&re_string,
|
||||
RegexOptions::REGEX_OPTION_NONE,
|
||||
|
@ -681,6 +682,21 @@ mod test {
|
|||
assert_eq!(result.eval_as_string(), "");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn starting_stars_become_escaped() {
|
||||
let result = AstNode::parse(&["yolo", ":", r"*yolo"])
|
||||
.unwrap()
|
||||
.eval()
|
||||
.unwrap();
|
||||
assert_eq!(result.eval_as_string(), "0");
|
||||
|
||||
let result = AstNode::parse(&["*yolo", ":", r"*yolo"])
|
||||
.unwrap()
|
||||
.eval()
|
||||
.unwrap();
|
||||
assert_eq!(result.eval_as_string(), "5");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn validate_regex_valid() {
|
||||
assert!(validate_regex(r"(a+b) \(a* b\)").is_ok());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue