The following regex doesn't match while it should.
"dir/file.mp3" =~ m{ ([^/]+) (?: / (*SKIP)(*FAIL) | \z ) }x
Disabling the optimization (I don't know which one causes this) with (?{})
makes the match succeed as it should.
say $& if "dir/file.mp3" =~ m{ ([^/]+) (?: (?{}) / (*SKIP)(*FAIL) | \z ) }x
Additionally, Using a possessive quantifier makes the bug go away.
$ perl -E 'say $& if "dir/file.mp3" =~ m{ ([^/]++) (?: / (*SKIP)(*FAIL) | \z ) }x'
file.mp3
When running the faulty regex with use re "debug";
the message Contradicts stclass... [regexec_flags]
appears.
$ perl -E 'use re "debug"; say $& if "dir/file.mp3" =~ m{ ([^/]+) (?: / (*SKIP)(*FAIL) | \z ) }x'
Compiling REx " ([^/]+) (?: / (*SKIP)(*FAIL) | \z ) "
Final program:
1: OPEN1 (3)
3: PLUS (6)
4: NANYOFM[/] (0)
6: CLOSE1 (8)
8: BRANCH (buf:1/1) (16)
10: EXACT </> (12)
12: SKIP (14)
14: OPFAIL (20)
16: BRANCH (buf:1/1) (FAIL)
18: EOS (20)
19: TAIL (20)
20: END (0)
stclass NANYOFM[/] plus minlen 1
Matching REx " ([^/]+) (?: / (*SKIP)(*FAIL) | \z ) " against "dir/file.mp3"
Matching stclass NANYOFM[/] against "dir/file.mp3" (12 bytes)
0 <> <dir/file.m> | 0| 1:OPEN1(3)
0 <> <dir/file.m> | 0| 3:PLUS(6)
| 0| NANYOFM[/] can match 3 times out of 2147483647...
3 <dir> </file.mp3> | 1| 6:CLOSE1(8)
3 <dir> </file.mp3> | 1| 8:BRANCH (buf:1/1)(16)
3 <dir> </file.mp3> | 2| 10:EXACT </>(12)
4 <dir/> <file.mp3> | 2| 12:SKIP(14)
4 <dir/> <file.mp3> | 3| 14:OPFAIL(20)
| 3| failed...
| 2| failed...
Contradicts stclass... [regexec_flags]
Match failed
Freeing REx: " ([^/]+) (?: / (*SKIP)(*FAIL) | \z ) "
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4