Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0a9c155

Browse files
committed
fix to not delegate the(?s:.)*? at the beginning of a wrapped regex
1 parentafde640 commit0a9c155

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

‎examples/toy.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,11 +277,18 @@ digraph G {
277277

278278
#[test]
279279
fntest_compilation_wrapped_debug_output_explict_capture_group_zero(){
280-
let expected ="wrapped Regex\"a+b(?=c)\", explicit_capture_group_0: true";
280+
let expected ="wrapped Regex\"(a+b)c\", explicit_capture_group_0: true";
281281

282282
assert_compiled_prog("a+b(?=c)",&expected);
283283
}
284284

285+
#[test]
286+
fntest_compilation_wrapped_debug_output_explict_capture_group_zero_with_non_capture_group(){
287+
let expected ="wrapped Regex\"(a+b)(?:c|d)\", explicit_capture_group_0: true";
288+
289+
assert_compiled_prog("a+b(?=c|d)",&expected);
290+
}
291+
285292
fnassert_graph(re:&str,expected:&str){
286293
usecrate::graph;
287294
letmut buf =Vec::new();

‎src/lib.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -748,8 +748,8 @@ impl Regex {
748748
// we do our own to_str because escapes are different
749749
// NOTE: there is a good opportunity here to use Hir to avoid regex-automata re-parsing it
750750
letmut re_cooked =String::new();
751-
// same as raw_tree.expr above, but it was moved, so traverse to find it
752751
if !requires_capture_group_fixup{
752+
// same as raw_tree.expr above, but it was moved, so traverse to find it
753753
let raw_e =match tree.expr{
754754
Expr::Concat(ref v) =>match v[1]{
755755
Expr::Group(ref child) => child,
@@ -759,13 +759,26 @@ impl Regex {
759759
};
760760
raw_e.to_str(&mut re_cooked,0);
761761
}else{
762-
tree.expr.to_str(&mut re_cooked,0);
762+
match tree.expr{
763+
Expr::Concat(ref v) =>{
764+
for exprin v.iter().skip(1){
765+
expr.to_str(&mut re_cooked,2);
766+
}
767+
}
768+
_ =>unreachable!(),
769+
}
763770
};
764771
let inner = compile::compile_inner(&re_cooked,&options)?;
765772
returnOk(Regex{
766773
inner:RegexImpl::Wrap{
767774
inner,
768-
options,
775+
options:RegexOptions{
776+
pattern: re_cooked.clone(),
777+
syntaxc: options.syntaxc,
778+
backtrack_limit: options.backtrack_limit,
779+
delegate_size_limit: options.delegate_size_limit,
780+
delegate_dfa_size_limit: options.delegate_dfa_size_limit,
781+
},
769782
explicit_capture_group_0: requires_capture_group_fixup,
770783
},
771784
named_groups:Arc::new(tree.named_groups),

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp