Sortix
Sortix Download Manual Development Source Code News Blog More

os-test > regex

Legend

Outcomes
Good Good Missing optional Outside libc
Partial Extension Previous posix
Neutral None
Bad Compile error Incompatible Missing header Undeclared Undefined reference Unknown type

Good. A cell is good if the declaration is present in the header and can be linked with libc. This outcome means the test succeeded with the appropriate -D_POSIX_C_SOURCE=202405 or -D_XOPEN_SOURCE=800 feature macros and the standard libraries libc, libpthread, libm, librt, and libxnet.

Missing optional. A cell is missing_optional if the test could not be compiled, but the declaration is optional in POSIX and need not be provided.

Outside libc. A cell is outside_libc if the test could be compiled, but had to be linked with another standard library than the ones prescribed by POSIX: libc, libpthread, libm, librt, and libxnet. This may not conform to POSIX depending on the linking options provided by getconf(1)/confstr(3).

Extension. A cell is extension if the test could not be compiled with the _POSIX_C_SOURCE and _XOPEN_SOURCE feature macros, but it could instead be compiled with other system-specific feature macros that provide the entire API. This outcome means the system header feature macro logic does not support the latest POSIX.1-2024 standard and only receives partial credit. This outcome typically indicates a declaration new to POSIX.1-2024.

Previous posix. A cell is previous_posix if the test could not be compiled with the -D_POSIX_C_SOURCE=202405 or -D_XOPEN_SOURCE=800 feature macros from the POSIX.1-2024 standard, but the test could instead be compiled with the older -D_POSIX_C_SOURCE=200809L or -D_XOPEN_SOURCE=700 feature macros from the older POSIX.1-2008 standard. This outcome means the system header feature macro logic does not support the latest POSIX.1-2024 standard and only receives partial credit. In particular, the header did not check if the value was higher than the supported value, but instead hard-coded the supported values, and failed to be forward compatible with new standard versions.

None. A cell is none if there is no test data result for that operating system.

Compile error. A cell is compile_error if the test could not be compiled and the error message was not recognized as a more precise error test outcome.

Incompatible. A cell is incompatible if the declaration existed in the header, but had a signature that is incompatible with the standardized declaration. This outcome typically indicates a type error in the declaration. Addressing the issue may require an incompatible ABI change or special compatibility logic.

Missing header. A cell is missing_header if the header did not exist.

Undeclared. A cell is undeclared if the header did not contain the declaration.

Undefined reference. A cell is undefined if the test could be compiled, but could not be linked with the standard library.

Unknown type. A cell is unknown_type if the test could not be compiled and failed because a required type was not declared. In some cases, functions fail because the header omitted a required type for a function and instead declared the function in an alternate fashion with an incompatible alias for the type.

§. The § link on the left of each row links to that row.

regex

This suite tests regular expressions.

Each feature in POSIX regular expressions is tested in both BRE (Basic Regular Expression) mode and ERE (Extended Regular Expression) mode. BRE is not actually a regular expression language, despite the name, because it lacks alternations, and importantly because it has back references, which are mathematically impossible to implement efficiently (unless P=NP IIRC). ERE is the real fully feature POSIX regular expression language, which can be implemented efficiently due to the lack of back references. However, POSIX optionally allows BRE implementations to have all ERE features via a special backslash syntax.

This suite is split into the strict base POSIX tests, which tests every sentence that is mandatory in POSIX; and the nonstandard tests, which tests all the optional behavior as well as common de facto extensions.

Each regular expression feature is exhaustively combined with each other regular expression feature to ensure that the features work together. More complicated combinations are tested that involve three or more features in some interesting cases. Each flag to regcomp and regexec are tested as well with their relevant features.

The POSIX requirements on how regular expressions choose their matches are very specific. They can be a little difficult to interpret at times and can be even more tricky to implement properly. See Chapter 9 in POSIX.1-2024 along with the description of regcomp+regexec for all the official rules. Many tests use a truth table approach where every possible reasonable input is given to each regular expression, so it's more likely that implementation bugs are discovered.

The nonstandard tests check every extension I know of, along with UTF-8 and unicode support, including case sensitivity and the behavior on invalid UTF-8 sequences. It's technically fine to disagree with the nonstandard tests, and they mostly exist to study the availability of extensions, and to make sure they are implemented properly in a common way. However, POSIX does mandate that if some nonstandard features like \| are implemented in BRE, then their semantics must match that of the ERE counterparts. If an implementation chooses to have those extensions, then some of the nonstandard tests must be complied with as well.

Overall this test suite is very comprehensive and should provide a near exhaustive coverage of the regular expression features. I read every relevant sentence in POSIX and made sure a test case covered each sentence. The only exceptions are are as follows:

The REG_MINIMAL flag and the ??, ?, +?, and {}? ERE features are not tested because the POSIX.1-2024 specification appears to have been a rush job. The original proposal was fundamentally flawed, and the attempt to fix it does not appear to have been deliberated in detail. I was left with many questions after reading the text. No system implements those features yet, so I don't have any reference data to make test expectations with. The text is full of potential contradictions that I am unclear how to resolve. For instance, does "X??" prefer to match the empty string or "X"? The cited example of ".?c" matching "abcabc" says that it prefers the "abc" match, but is that really how ungreedy matching works? It contradicts the longest overall match rule, and I believe instead usually ungreedy matching loses to over competing greedy matching expressions, but the overall longest match is preferred. Then there's "a*?" where * is usually required to match at least one thing, if at all possible, so on the input "aa" does this pattern prefer the empty string or "a"? There is also the curious case of (X){1,1}?, where it's unclear if the whole X subexpression itself becomes ungreedy? I don't really have enough information to implement the features, let alone test them.

The test suite may miss more advanced implementation bugs that only appear on specifically complicated regular expressions. I had to stop somewhere with the combinatorial explosion of test cases.

aix
AIX 7.3 powerpc
dragonfly
DragonFly 6.4-RELEASE x86_64
freebsd
FreeBSD 15.0-RELEASE amd64
haiku
Haiku R1~beta5+development x86_64
hurd
GNU 0.9 i686-AT386
linux
Linux 7.1.12+deb14-amd64 x86_64
macos
macOS 26.5.2 Darwin 25.5.0 arm64
managarm
Managarm 0.0.1-rolling x86_64
minix
Minix 3.4.0 i386
musl
Linux 6.18.39-0-lts x86_64
netbsd
NetBSD 10.1 amd64
omnios
SunOS 5.11 r151056 i386
openbsd
OpenBSD 7.8 amd64
redox
Redox 0.5.12 x86_64
solaris
SunOS 5.11 11.4.94.221.2 sparc
sortix
Sortix 1.1.0-dev Sep 9 2026 x86_64
§ alternation-anchor-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ alternation-asterisk-subexpr-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
ERE '((a)|(b))*' on "ab" [2] matched "a" [0-1] instead of "" [-1--1]
hurd: bad
ERE '((a)|(b))*' on "ab" [2] matched "a" [0-1] instead of "" [-1--1]
linux: bad
ERE '((a)|(b))*' on "ab" [2] matched "a" [0-1] instead of "" [-1--1]
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
ERE '((a)|(b))*' on "ab" [2] matched "a" [0-1] instead of "" [-1--1]
§ alternation-bracket-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ alternation-duplication-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
ERE 'a*|b+|c{2}|d?' on "b" [0] matched "" [0-0] instead of "b" [0-1]
§ alternation-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ alternation-subexpr-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
ERE '(a(b*))|(ba)|((b|a)(a|b))' on "aa" [0] matched "a" [0-1] instead of "aa" [0-2]
§ anchor-bracket-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ anchor-bracket-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ anchor-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
BRE 'x^' did not match "x^"
§ anchor-duplication-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ anchor-duplication-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
ERE '(^){2}' did not match ""
musl: good
exit: 0
netbsd: good
exit: 0
omnios: bad
ERE '(^){2}' did not match ""
openbsd: bad
ERE '(^){2}' did not match ""
redox: none solaris: good
exit: 0
sortix: bad
Aborted
exit: 134
§ anchor-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: bad
ERE regcomp: $ anchor not at end of pattern: $x
sortix: good
exit: 0
§ anchor-subexpr-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ anchor-subexpr-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ asterisk-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
BRE regcomp: '?', '*', or '+' not preceded by valid regular expression: *
§ asterisk-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ asterisk-subexpr-bre aix: bad
BRE '\(a\(\(a*\)*\)\)' on "a" [3] matched "" [-1--1] instead of "" [1-1]
dragonfly: good
exit: 0
freebsd: bad
BRE '\(a\(\(a*\)*\)\)' on "aa" [3] matched "" [2-2] instead of "a" [1-2]
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
exit: 139
musl: good
exit: 0
netbsd: bad
BRE '\(a\(\(a*\)*\)\)' on "aa" [3] matched "" [2-2] instead of "a" [1-2]
omnios: bad
BRE '\(a\(\(a*\)*\)\)' on "aa" [3] matched "" [2-2] instead of "a" [1-2]
openbsd: bad
BRE '\(a\(\(a*\)*\)\)' on "aa" [3] matched "" [2-2] instead of "a" [1-2]
redox: none solaris: bad
BRE '\(a\(\(a*\)*\)\)' on "a" [3] matched "" [-1--1] instead of "" [1-1]
sortix: bad
BRE regcomp: '?', '*', or '+' not preceded by valid regular expression: \(*\)
§ asterisk-subexpr-ere aix: bad
ERE '(a((a*)*))' on "a" [3] matched "" [-1--1] instead of "" [1-1]
dragonfly: good
exit: 0
freebsd: bad
ERE '(a((a*)*))' on "aa" [3] matched "" [2-2] instead of "a" [1-2]
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
exit: 139
musl: good
exit: 0
netbsd: bad
ERE '(a((a*)*))' on "aa" [3] matched "" [2-2] instead of "a" [1-2]
omnios: bad
ERE '(a((a*)*))' on "aa" [3] matched "" [2-2] instead of "a" [1-2]
openbsd: bad
ERE '(a((a*)*))' on "aa" [3] matched "" [2-2] instead of "a" [1-2]
redox: none solaris: bad
ERE '(a((a*)*))' on "a" [3] matched "" [-1--1] instead of "" [1-1]
sortix: bad
ERE '(a((a*)*))' on "a" [3] matched "" [-1--1] instead of "" [1-1]
§ asterisk-subexpr-optional-ere aix: bad
ERE '(a?)*' on "" [1] matched "" [-1--1] instead of "" [0-0]
dragonfly: good
exit: 0
freebsd: bad
ERE '(a?)*' on "a" [1] matched "" [1-1] instead of "a" [0-1]
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
exit: 139
musl: good
exit: 0
netbsd: bad
ERE '(a?)*' on "a" [1] matched "" [1-1] instead of "a" [0-1]
omnios: bad
ERE '(a?)*' on "a" [1] matched "" [1-1] instead of "a" [0-1]
openbsd: bad
ERE '(a?)*' on "a" [1] matched "" [1-1] instead of "a" [0-1]
redox: none solaris: bad
ERE '(a?)*' on "" [1] matched "" [-1--1] instead of "" [0-0]
sortix: bad
ERE '(a?)*' on "" [1] matched "" [-1--1] instead of "" [0-0]
§ backref-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
BRE regcomp: Invalid regular expression: \(abc\)\1
§ bracket aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
BRE '[]]' did not match "]"
§ bracket-charclass aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: bad
BRE regcomp: Unknown collating element: [[=a=]]
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
BRE '[[=a=]]' did not match "a"
§ bracket-collate aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: bad
BRE regcomp: Unknown collating element: [[.a.]]
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
BRE '[[.a.]]' did not match "a"
§ bracket-equivclass aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
BRE '[[:alnum:]]' did not match "a"
§ bracket-range aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: bad
BRE regcomp: invalid character range: [---]
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
BRE regcomp: invalid character range: [---]
musl: good
exit: 0
netbsd: bad
BRE regcomp: invalid character range: [---]
omnios: bad
BRE regcomp: invalid character range: [---]
openbsd: bad
BRE regcomp: invalid character range: [---]
redox: none solaris: good
exit: 0
sortix: bad
BRE '[]#-]]' did not match "#]"
§ bracket-range-collate aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: bad
BRE regcomp: Unknown collating element: [[.b.]-[.d.]]
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
BRE '[[.b.]-[.d.]]' did not match "b"
§ char-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
BRE regcomp: '?', '*', or '+' not preceded by valid regular expression: *
§ char-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: bad
ERE regcomp: parentheses not balanced: a)
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
ERE regcomp: "\(\)" or "()" imbalance: a)
§ duplication-bracket-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ duplication-bracket-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ escape-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ escape-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ icase-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE REG_ICASE '[A-f]' did not match "G"
hurd: bad
BRE REG_ICASE '[A-f]' did not match "G"
linux: bad
BRE REG_ICASE '[A-f]' did not match "G"
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: bad
BRE regcomp: Unknown collating element: [[.a.]]
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
BRE '[[.a.]]' did not match "a"
§ icase-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
ERE REG_ICASE '[A-f]' did not match "G"
hurd: bad
ERE REG_ICASE '[A-f]' did not match "G"
linux: bad
ERE REG_ICASE '[A-f]' did not match "G"
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: bad
ERE regcomp: Unknown collating element: [[.a.]]
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
ERE '[[.a.]]' did not match "a"
§ interval-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: bad
BRE regcomp: empty (sub)expression: a\{0,0\}
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
BRE regcomp: empty (sub)expression: a\{0,0\}
musl: good
exit: 0
netbsd: bad
BRE regcomp: empty (sub)expression: a\{0,0\}
omnios: bad
BRE regcomp: invalid regular expression: a\{0,0\}
openbsd: bad
BRE regcomp: empty (sub)expression: a\{0,0\}
redox: none solaris: good
exit: 0
sortix: bad
Segmentation fault
exit: 139
§ interval-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: bad
ERE regcomp: empty (sub)expression: a{0,0}
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
ERE regcomp: empty (sub)expression: a{0,0}
musl: good
exit: 0
netbsd: bad
ERE regcomp: empty (sub)expression: a{0,0}
omnios: bad
ERE regcomp: invalid regular expression: a{0,0}
openbsd: bad
ERE regcomp: empty (sub)expression: a{0,0}
redox: none solaris: good
exit: 0
sortix: bad
Segmentation fault
exit: 139
§ interval-subexpr-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: bad
BRE '\(a\(\(a\{1,2\}\)\{1,2\}\)\)' on "aaa" [3] matched "a" [2-3] instead of "aa" [1-3]
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
exit: 139
musl: bad
BRE '\(a\(\(a\{1,2\}\)\{1,2\}\)\)' on "aaa" [3] matched "a" [2-3] instead of "aa" [1-3]
netbsd: bad
BRE '\(a\(\(a\{1,2\}\)\{1,2\}\)\)' on "aaa" [3] matched "a" [2-3] instead of "aa" [1-3]
omnios: bad
BRE '\(a\(\(a\{1,2\}\)\{1,2\}\)\)' on "aaa" [3] matched "a" [2-3] instead of "aa" [1-3]
openbsd: bad
BRE '\(a\(\(a\{1,2\}\)\{1,2\}\)\)' on "aaa" [3] matched "a" [2-3] instead of "aa" [1-3]
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ interval-subexpr-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: bad
ERE '(a((a{1,2}){1,2}))' on "aaa" [3] matched "a" [2-3] instead of "aa" [1-3]
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
exit: 139
musl: bad
ERE '(a((a{1,2}){1,2}))' on "aaa" [3] matched "a" [2-3] instead of "aa" [1-3]
netbsd: bad
ERE '(a((a{1,2}){1,2}))' on "aaa" [3] matched "a" [2-3] instead of "aa" [1-3]
omnios: bad
ERE '(a((a{1,2}){1,2}))' on "aaa" [3] matched "a" [2-3] instead of "aa" [1-3]
openbsd: bad
ERE '(a((a{1,2}){1,2}))' on "aaa" [3] matched "a" [2-3] instead of "aa" [1-3]
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ newline-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
BRE REG_NEWLINE "." did not reject "
"
§ newline-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
ERE REG_NEWLINE "." did not reject "
"
§ notboleol-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ notboleol-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ optional-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ optional-subexpr-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ period-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ period-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ plus-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ plus-subexpr-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ subexpr-bracket-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ subexpr-bracket-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ subexpr-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ subexpr-ere aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: bad
ERE regcomp: parentheses not balanced: )
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
ERE regcomp: "\(\)" or "()" imbalance: )
Optional: nonstandard
Nonstandard Extensions
§ alternation-anchor-bre aix: bad
BRE '^a\|b' did not match "a"
dragonfly: bad
BRE '^a\|b' did not match "a"
freebsd: bad
BRE '^a\|b' did not match "a"
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE '^a\|b' did not match "a"
managarm: none minix: bad
BRE '^a\|b' did not match "a"
musl: good
exit: 0
netbsd: bad
BRE '^a\|b' did not match "a"
omnios: bad
BRE '^a\|b' did not match "a"
openbsd: bad
BRE '^a\|b' did not match "a"
redox: none solaris: bad
BRE '^a\|b' did not match "a"
sortix: good
exit: 0
§ alternation-bracket-bre aix: bad
BRE '[ab][b][c]\|ccb\|[b][abc]' did not match "ba"
dragonfly: bad
BRE '[ab][b][c]\|ccb\|[b][abc]' did not match "ba"
freebsd: bad
BRE '[ab][b][c]\|ccb\|[b][abc]' did not match "ba"
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE '[ab][b][c]\|ccb\|[b][abc]' did not match "ba"
managarm: none minix: bad
BRE '[ab][b][c]\|ccb\|[b][abc]' did not match "ba"
musl: good
exit: 0
netbsd: bad
BRE '[ab][b][c]\|ccb\|[b][abc]' did not match "ba"
omnios: bad
BRE '[ab][b][c]\|ccb\|[b][abc]' did not match "ba"
openbsd: bad
BRE '[ab][b][c]\|ccb\|[b][abc]' did not match "ba"
redox: none solaris: bad
BRE '[ab][b][c]\|ccb\|[b][abc]' did not match "ba"
sortix: good
exit: 0
§ alternation-bre aix: bad
BRE 'a\|b' did not match "a"
dragonfly: bad
BRE 'a\|b' did not match "a"
freebsd: bad
BRE 'a\|b' did not match "a"
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE 'a\|b' did not match "a"
managarm: none minix: bad
BRE 'a\|b' did not match "a"
musl: good
exit: 0
netbsd: bad
BRE 'a\|b' did not match "a"
omnios: bad
BRE 'a\|b' did not match "a"
openbsd: bad
BRE 'a\|b' did not match "a"
redox: none solaris: bad
BRE 'a\|b' did not match "a"
sortix: good
exit: 0
§ alternation-duplication-bre aix: bad
BRE 'a*\|b\+\|c\{2\}\|d\?' did not match ""
dragonfly: bad
BRE 'a*\|b\+\|c\{2\}\|d\?' did not match ""
freebsd: bad
BRE 'a*\|b\+\|c\{2\}\|d\?' did not match ""
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE 'a*\|b\+\|c\{2\}\|d\?' did not match ""
managarm: none minix: bad
BRE 'a*\|b\+\|c\{2\}\|d\?' did not match ""
musl: good
exit: 0
netbsd: bad
BRE 'a*\|b\+\|c\{2\}\|d\?' did not match ""
omnios: bad
BRE 'a*\|b\+\|c\{2\}\|d\?' did not match ""
openbsd: bad
BRE 'a*\|b\+\|c\{2\}\|d\?' did not match ""
redox: none solaris: bad
BRE 'a*\|b\+\|c\{2\}\|d\?' did not match ""
sortix: bad
BRE 'a*\|b\+\|c\{2\}\|d\?' on "b" [0] matched "" [0-0] instead of "b" [0-1]
§ alternation-subexpr-bre aix: bad
BRE '\(a\(b*\)\)\|\(ba\)\|\(\(b\|a\)\(a\|b\)\)' did not match "a"
dragonfly: bad
BRE '\(a\(b*\)\)\|\(ba\)\|\(\(b\|a\)\(a\|b\)\)' did not match "a"
freebsd: bad
BRE '\(a\(b*\)\)\|\(ba\)\|\(\(b\|a\)\(a\|b\)\)' did not match "a"
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE '\(a\(b*\)\)\|\(ba\)\|\(\(b\|a\)\(a\|b\)\)' did not match "a"
managarm: none minix: bad
BRE '\(a\(b*\)\)\|\(ba\)\|\(\(b\|a\)\(a\|b\)\)' did not match "a"
musl: good
exit: 0
netbsd: bad
BRE '\(a\(b*\)\)\|\(ba\)\|\(\(b\|a\)\(a\|b\)\)' did not match "a"
omnios: bad
BRE '\(a\(b*\)\)\|\(ba\)\|\(\(b\|a\)\(a\|b\)\)' did not match "a"
openbsd: bad
BRE '\(a\(b*\)\)\|\(ba\)\|\(\(b\|a\)\(a\|b\)\)' did not match "a"
redox: none solaris: bad
BRE '\(a\(b*\)\)\|\(ba\)\|\(\(b\|a\)\(a\|b\)\)' did not match "a"
sortix: bad
BRE '\(a\(b*\)\)\|\(ba\)\|\(\(b\|a\)\(a\|b\)\)' on "aa" [0] matched "a" [0-1] instead of "aa" [0-2]
§ anchor-alternation-asterisk-bre aix: bad
BRE 'x\|^*' did not match "x"
dragonfly: bad
BRE 'x\|^*' did not match "x"
freebsd: bad
BRE 'x\|^*' did not match "x"
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE 'x\|^*' did not match "x"
managarm: none minix: bad
BRE 'x\|^*' did not match "x"
musl: good
exit: 0
netbsd: bad
BRE 'x\|^*' did not match "x"
omnios: bad
BRE 'x\|^*' did not match "x"
openbsd: bad
BRE 'x\|^*' did not match "x"
redox: none solaris: bad
BRE 'x\|^*' did not match "x"
sortix: bad
BRE regcomp: '?', '*', or '+' not preceded by valid regular expression: x\|^*
§ anchor-asterisk-subexpr-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: bad
BRE '\(^*\)' on "*" [0] matched "" [0-0] instead of "*" [0-1]
sortix: bad
BRE regcomp: '?', '*', or '+' not preceded by valid regular expression: \(^*\)
§ anchor-duplication-ns-bre aix: bad
BRE '^a\?$' did not match ""
dragonfly: bad
BRE '^a\?$' did not match ""
freebsd: bad
BRE '^a\?$' did not match ""
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE '^a\?$' did not match ""
managarm: none minix: bad
BRE '^a\?$' did not match ""
musl: good
exit: 0
netbsd: bad
BRE '^a\?$' did not match ""
omnios: bad
BRE '^a\?$' did not match ""
openbsd: bad
BRE '^a\?$' did not match ""
redox: none solaris: bad
BRE '^a\?$' did not match ""
sortix: bad
Aborted
exit: 134
§ anchor-subexpr-ns-bre aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: bad
BRE '\(^x\(y\)\)' did not match "xy"
sortix: good
exit: 0
§ bracket-charclass-rsq aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: bad
BRE regcomp: invalid collating element: [[=]=]x]
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
BRE regcomp: invalid collating element: [[=]=]x]
musl: bad
BRE regcomp: Unknown collating element: [[=]=]x]
netbsd: bad
BRE regcomp: invalid collating element: [[=]=]x]
omnios: bad
BRE regcomp: invalid collating element: [[=]=]x]
openbsd: bad
BRE regcomp: invalid collating element: [[=]=]x]
redox: none solaris: good
exit: 0
sortix: bad
BRE '[[=]=]x]' did not match "x"
§ duplication-bracket-ns-bre aix: bad
BRE '[a-z]\+' did not match "a"
dragonfly: bad
BRE '[a-z]\+' did not match "a"
freebsd: bad
BRE '[a-z]\+' did not match "a"
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE '[a-z]\+' did not match "a"
managarm: none minix: bad
BRE '[a-z]\+' did not match "a"
musl: good
exit: 0
netbsd: bad
BRE '[a-z]\+' did not match "a"
omnios: bad
BRE '[a-z]\+' did not match "a"
openbsd: bad
BRE '[a-z]\+' did not match "a"
redox: none solaris: bad
BRE '[a-z]\+' did not match "a"
sortix: good
exit: 0
§ empty-bre aix: good
exit: 0
dragonfly: bad
BRE regcomp: Empty (sub)expression:
freebsd: bad
BRE regcomp: empty (sub)expression:
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE regcomp: empty (sub)expression:
managarm: none minix: bad
BRE regcomp: empty (sub)expression:
musl: good
exit: 0
netbsd: bad
BRE regcomp: empty (sub)expression:
omnios: bad
BRE regcomp: invalid regular expression:
openbsd: bad
BRE regcomp: empty (sub)expression:
redox: none solaris: good
exit: 0
sortix: bad
BRE REG_NOTBOL REG_NOTEOL '' did not match "D"
§ empty-ere aix: good
exit: 0
dragonfly: bad
ERE regcomp: Empty (sub)expression:
freebsd: bad
ERE regcomp: empty (sub)expression:
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
ERE regcomp: empty (sub)expression:
managarm: none minix: bad
ERE regcomp: empty (sub)expression:
musl: good
exit: 0
netbsd: bad
ERE regcomp: empty (sub)expression:
omnios: bad
ERE regcomp: invalid regular expression:
openbsd: bad
ERE regcomp: empty (sub)expression:
redox: none solaris: good
exit: 0
sortix: bad
ERE REG_NOTBOL REG_NOTEOL '' did not match ""
§ icase-ns-bre aix: bad
BRE 'a\?' did not match ""
dragonfly: bad
BRE 'a\?' did not match ""
freebsd: bad
BRE 'a\?' did not match ""
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE 'a\?' did not match ""
managarm: none minix: bad
BRE 'a\?' did not match ""
musl: good
exit: 0
netbsd: bad
BRE 'a\?' did not match ""
omnios: bad
BRE 'a\?' did not match ""
openbsd: bad
BRE 'a\?' did not match ""
redox: none solaris: bad
BRE 'a\?' did not match ""
sortix: bad
BRE REG_ICASE 'a\?' on "A" [0] matched "" [0-0] instead of "A" [0-1]
§ interval-omit-bre aix: bad
BRE regcomp: invalid \{ \} repetition: a\{,3\}
dragonfly: bad
BRE regcomp: Invalid contents of {}: a\{,3\}
freebsd: bad
BRE regcomp: invalid repetition count(s): a\{,3\}
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE regcomp: invalid repetition count(s): a\{,3\}
managarm: none minix: bad
BRE regcomp: invalid repetition count(s): a\{,3\}
musl: bad
BRE regcomp: Invalid contents of {}: a\{,3\}
netbsd: bad
BRE regcomp: invalid repetition count(s): a\{,3\}
omnios: bad
BRE regcomp: invalid repetition count(s): a\{,3\}
openbsd: bad
BRE regcomp: invalid repetition count(s): a\{,3\}
redox: none solaris: bad
BRE regcomp: contents of { } or \{ \} invalid: a\{,3\}
sortix: bad
BRE regcomp: Content of "\{\}" invalid: not a number, number too large, more than two numbers, first larger than second: a\{,3\}
§ interval-omit-ere aix: bad
ERE 'a{,3}' did not match ""
dragonfly: bad
ERE 'a{,3}' did not match ""
freebsd: bad
ERE regcomp: invalid repetition count(s): a{,3}
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
ERE 'a{,3}' did not match ""
managarm: none minix: bad
ERE 'a{,3}' did not match ""
musl: bad
ERE regcomp: Invalid contents of {}: a{,3}
netbsd: bad
ERE regcomp: invalid repetition count(s): a{,3}
omnios: bad
ERE regcomp: invalid repetition count(s): a{,3}
openbsd: bad
ERE 'a{,3}' did not match ""
redox: none solaris: bad
ERE regcomp: syntax error: a{,3}
sortix: bad
ERE regcomp: Content of "\{\}" invalid: not a number, number too large, more than two numbers, first larger than second: a{,3}
§ interval-omit-zero-bre aix: bad
BRE regcomp: invalid \{ \} repetition: a\{,0\}
dragonfly: bad
BRE regcomp: Invalid contents of {}: a\{,0\}
freebsd: bad
BRE regcomp: invalid repetition count(s): a\{,0\}
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE regcomp: invalid repetition count(s): a\{,0\}
managarm: none minix: bad
BRE regcomp: invalid repetition count(s): a\{,0\}
musl: bad
BRE regcomp: Invalid contents of {}: a\{,0\}
netbsd: bad
BRE regcomp: invalid repetition count(s): a\{,0\}
omnios: bad
BRE regcomp: invalid repetition count(s): a\{,0\}
openbsd: bad
BRE regcomp: invalid repetition count(s): a\{,0\}
redox: none solaris: bad
BRE regcomp: contents of { } or \{ \} invalid: a\{,0\}
sortix: bad
BRE regcomp: Content of "\{\}" invalid: not a number, number too large, more than two numbers, first larger than second: a\{,0\}
§ interval-omit-zero-ere aix: bad
ERE 'a{,0}' did not match ""
dragonfly: bad
ERE 'a{,0}' did not match ""
freebsd: bad
ERE regcomp: invalid repetition count(s): a{,0}
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
ERE 'a{,0}' did not match ""
managarm: none minix: bad
ERE 'a{,0}' did not match ""
musl: bad
ERE regcomp: Invalid contents of {}: a{,0}
netbsd: bad
ERE regcomp: invalid repetition count(s): a{,0}
omnios: bad
ERE regcomp: invalid repetition count(s): a{,0}
openbsd: bad
ERE 'a{,0}' did not match ""
redox: none solaris: bad
ERE regcomp: syntax error: a{,0}
sortix: bad
ERE regcomp: Content of "\{\}" invalid: not a number, number too large, more than two numbers, first larger than second: a{,0}
§ optional-bre aix: bad
BRE 'a\?ab\?' did not match "a"
dragonfly: bad
BRE 'a\?ab\?' did not match "a"
freebsd: bad
BRE 'a\?ab\?' did not match "a"
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE 'a\?ab\?' did not match "a"
managarm: none minix: bad
BRE 'a\?ab\?' did not match "a"
musl: good
exit: 0
netbsd: bad
BRE 'a\?ab\?' did not match "a"
omnios: bad
BRE 'a\?ab\?' did not match "a"
openbsd: bad
BRE 'a\?ab\?' did not match "a"
redox: none solaris: bad
BRE 'a\?ab\?' did not match "a"
sortix: good
exit: 0
§ optional-subexpr-bre aix: bad
BRE '\(a\?b\)' did not match "b"
dragonfly: bad
BRE '\(a\?b\)' did not match "b"
freebsd: bad
BRE '\(a\?b\)' did not match "b"
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE '\(a\?b\)' did not match "b"
managarm: none minix: bad
BRE '\(a\?b\)' did not match "b"
musl: good
exit: 0
netbsd: bad
BRE '\(a\?b\)' did not match "b"
omnios: bad
BRE '\(a\?b\)' did not match "b"
openbsd: bad
BRE '\(a\?b\)' did not match "b"
redox: none solaris: bad
BRE '\(a\?b\)' did not match "b"
sortix: good
exit: 0
§ plus-bre aix: bad
BRE 'a\+' did not match "a"
dragonfly: bad
BRE 'a\+' did not match "a"
freebsd: bad
BRE 'a\+' did not match "a"
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE 'a\+' did not match "a"
managarm: none minix: bad
BRE 'a\+' did not match "a"
musl: good
exit: 0
netbsd: bad
BRE 'a\+' did not match "a"
omnios: bad
BRE 'a\+' did not match "a"
openbsd: bad
BRE 'a\+' did not match "a"
redox: none solaris: bad
BRE 'a\+' did not match "a"
sortix: good
exit: 0
§ plus-subexpr-bre aix: bad
BRE '\(a\+\)\(b\+\)' did not match "ab"
dragonfly: bad
BRE '\(a\+\)\(b\+\)' did not match "ab"
freebsd: bad
BRE '\(a\+\)\(b\+\)' did not match "ab"
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE '\(a\+\)\(b\+\)' did not match "ab"
managarm: none minix: bad
BRE '\(a\+\)\(b\+\)' did not match "ab"
musl: good
exit: 0
netbsd: bad
BRE '\(a\+\)\(b\+\)' did not match "ab"
omnios: bad
BRE '\(a\+\)\(b\+\)' did not match "ab"
openbsd: bad
BRE '\(a\+\)\(b\+\)' did not match "ab"
redox: none solaris: bad
BRE '\(a\+\)\(b\+\)' did not match "ab"
sortix: good
exit: 0
§ utf8-bracket aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE '[æø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
BRE '[Aλ]' did not match "λ"
omnios: good
exit: 0
openbsd: bad
BRE '[æø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
redox: none solaris: bad
BRE '[æø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
sortix: bad
BRE '[æø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
§ utf8-bracket-charclass aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE '[[:alpha:]]' did not match "ø"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE '[[:alpha:]]' did not match "ø"
redox: none solaris: bad
BRE '[[:alpha:]]' on "ø" [0] matched "Ã" [0-1] instead of "ø" [0-2]
sortix: bad
BRE '[[:alpha:]]' did not match "a"
§ utf8-bracket-charclass-icase aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE REG_ICASE '[[:alpha:]]' did not match "ø"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE REG_ICASE '[[:alpha:]]' did not match "ø"
redox: none solaris: bad
BRE REG_ICASE '[[:alpha:]]' on "ø" [0] matched "Ã" [0-1] instead of "ø" [0-2]
sortix: bad
BRE REG_ICASE '[[:alpha:]]' did not match "a"
§ utf8-bracket-collate aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE regcomp: Invalid collation character: [[.ø.]]
hurd: bad
BRE regcomp: Invalid collation character: [[.ø.]]
linux: bad
BRE regcomp: Invalid collation character: [[.ø.]]
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
BRE regcomp: Unknown collating element: [[.ø.]]
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE regcomp: invalid collating element: [[.ø.]]
redox: none solaris: bad
BRE regcomp: invalid collation element: [[.ø.]]
sortix: bad
BRE '[[.ø.]]' did not match "ø"
§ utf8-bracket-collate-icase aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE regcomp: Invalid collation character: [[.ø.]]
hurd: bad
BRE regcomp: Invalid collation character: [[.ø.]]
linux: bad
BRE regcomp: Invalid collation character: [[.ø.]]
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
BRE regcomp: Unknown collating element: [[.ø.]]
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE regcomp: invalid collating element: [[.ø.]]
redox: none solaris: bad
BRE regcomp: invalid collation element: [[.ø.]]
sortix: bad
BRE REG_ICASE '[[.ø.]]' did not match "ø"
§ utf8-bracket-collate-range aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE regcomp: Invalid collation character: [[.æ.]-[.ø.]]
hurd: bad
BRE regcomp: Invalid collation character: [[.æ.]-[.ø.]]
linux: bad
BRE regcomp: Invalid collation character: [[.æ.]-[.ø.]]
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
BRE regcomp: Unknown collating element: [[.æ.]-[.ø.]]
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE regcomp: invalid collating element: [[.æ.]-[.ø.]]
redox: none solaris: bad
BRE regcomp: invalid collation element: [[.æ.]-[.ø.]]
sortix: bad
BRE '[[.æ.]-[.ø.]]' did not match "æ"
§ utf8-bracket-collate-range-icase aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: bad
BRE REG_ICASE "[^[.æ.]-[.ø.]]" did not reject "æ"
haiku: bad
BRE regcomp: Invalid collation character: [[.æ.]-[.ø.]]
hurd: bad
BRE regcomp: Invalid collation character: [[.æ.]-[.ø.]]
linux: bad
BRE regcomp: Invalid collation character: [[.æ.]-[.ø.]]
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
BRE regcomp: Unknown collating element: [[.æ.]-[.ø.]]
netbsd: bad
BRE REG_ICASE "[^[.æ.]-[.ø.]]" did not reject "æ"
omnios: bad
BRE REG_ICASE "[^[.æ.]-[.ø.]]" did not reject "æ"
openbsd: bad
BRE regcomp: invalid collating element: [[.æ.]-[.ø.]]
redox: none solaris: bad
BRE regcomp: invalid collation element: [[.æ.]-[.ø.]]
sortix: bad
BRE REG_ICASE '[[.æ.]-[.ø.]]' did not match "æ"
§ utf8-bracket-equivclass aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE regcomp: Invalid collation character: [[=ø=]]
hurd: bad
BRE regcomp: Invalid collation character: [[=ø=]]
linux: bad
BRE regcomp: Invalid collation character: [[=ø=]]
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
BRE regcomp: Unknown collating element: [[=ø=]]
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE regcomp: invalid collating element: [[=ø=]]
redox: none solaris: bad
BRE regcomp: invalid collation element: [[=ø=]]
sortix: bad
BRE '[[=ø=]]' did not match "ø"
§ utf8-bracket-equivclass-icase aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE regcomp: Invalid collation character: [[=ø=]]
hurd: bad
BRE regcomp: Invalid collation character: [[=ø=]]
linux: bad
BRE regcomp: Invalid collation character: [[=ø=]]
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
BRE regcomp: Unknown collating element: [[=ø=]]
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE regcomp: invalid collating element: [[=ø=]]
redox: none solaris: bad
BRE regcomp: invalid collation element: [[=ø=]]
sortix: bad
BRE REG_ICASE '[[=ø=]]' did not match "ø"
§ utf8-bracket-icase aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE REG_ICASE '[æø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE REG_ICASE '[æø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
redox: none solaris: bad
BRE REG_ICASE '[æø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
sortix: bad
BRE REG_ICASE '[æø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
§ utf8-bracket-range aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE '[æ-ø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
hurd: bad
BRE regcomp: Invalid collation character: [æ-ø]
linux: bad
BRE regcomp: Invalid collation character: [æ-ø]
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE '[æ-ø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
redox: none solaris: bad
BRE '[æ-ø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
sortix: bad
BRE '[æ-ø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
§ utf8-bracket-range-icase aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: bad
BRE REG_ICASE "[^æ-ø]" did not reject "æ"
haiku: bad
BRE REG_ICASE '[æ-ø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
hurd: bad
BRE regcomp: Invalid collation character: [æ-ø]
linux: bad
BRE regcomp: Invalid collation character: [æ-ø]
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
BRE REG_ICASE "[^æ-ø]" did not reject "æ"
omnios: bad
BRE REG_ICASE "[^æ-ø]" did not reject "æ"
openbsd: bad
BRE REG_ICASE '[æ-ø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
redox: none solaris: bad
BRE REG_ICASE '[æ-ø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
sortix: bad
BRE REG_ICASE '[æ-ø]' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
§ utf8-char aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ utf8-char-icase aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE REG_ICASE 'æ' did not match "Æ"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE REG_ICASE 'æ' did not match "Æ"
redox: none solaris: bad
BRE REG_ICASE 'æ' did not match "Æ"
sortix: bad
BRE REG_ICASE 'æ' did not match "Æ"
§ utf8-invalid-continuation aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
BRE regexec: Illegal byte sequence: .: €
freebsd: good
exit: 0
haiku: bad
BRE "." did not reject "€"
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE regexec: illegal byte sequence: .: €
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE "." did not reject "€"
redox: none solaris: bad
BRE "." did not reject "€"
sortix: bad
BRE "." did not reject "€"
§ utf8-invalid-missing aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
BRE regexec: Illegal byte sequence: .: Ã
freebsd: good
exit: 0
haiku: bad
BRE "." did not reject "Ã"
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE regexec: illegal byte sequence: .: Ã
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE "." did not reject "Ã"
redox: none solaris: bad
BRE "." did not reject "Ã"
sortix: bad
BRE "." did not reject "Ã"
§ utf8-invalid-over-10ffff aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
BRE regexec: Illegal byte sequence: .: õ€€
freebsd: bad
BRE "." did not reject "õ€€"
haiku: bad
BRE "." did not reject "õ€€"
hurd: bad
BRE "." did not reject "õ€€"
linux: bad
BRE "." did not reject "õ€€"
macos: bad
BRE regexec: illegal byte sequence: .: õ€€
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
BRE "." did not reject "õ€€"
omnios: bad
BRE "." did not reject "õ€€"
openbsd: bad
BRE "." did not reject "õ€€"
redox: none solaris: bad
BRE "." did not reject "õ€€"
sortix: bad
BRE "." did not reject "õ€€"
§ utf8-invalid-overlong aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
BRE regexec: Illegal byte sequence: .: À¯
freebsd: good
exit: 0
haiku: bad
BRE "." did not reject "À¯"
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE regexec: illegal byte sequence: .: À¯
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE "." did not reject "À¯"
redox: none solaris: bad
BRE "." did not reject "À¯"
sortix: bad
BRE "." did not reject "À¯"
§ utf8-invalid-recover aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
BRE regexec: Illegal byte sequence: .: Ã
freebsd: good
exit: 0
haiku: bad
BRE '.' on "Ã " [0] matched "Ã" [0-1] instead of " " [1-2]
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
BRE regexec: illegal byte sequence: .: Ã
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
BRE '.' did not match "Ã "
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE '.' on "Ã " [0] matched "Ã" [0-1] instead of " " [1-2]
redox: none solaris: bad
BRE '.' on "Ã " [0] matched "Ã" [0-1] instead of " " [1-2]
sortix: bad
BRE '.' on "Ã " [0] matched "Ã" [0-1] instead of " " [1-2]
§ utf8-invalid-surrogate aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
BRE "." did not reject "í €"
freebsd: good
exit: 0
haiku: bad
BRE "." did not reject "í €"
hurd: bad
BRE "." did not reject "í €"
linux: bad
BRE "." did not reject "í €"
macos: bad
BRE regexec: illegal byte sequence: .: í €
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: good
exit: 0
omnios: bad
BRE "." did not reject "í €"
openbsd: bad
BRE "." did not reject "í €"
redox: none solaris: bad
BRE "." did not reject "í €"
sortix: bad
BRE "." did not reject "í €"
§ utf8-period aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE '.' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE '.' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
redox: none solaris: bad
BRE '.' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
sortix: bad
BRE '.' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
§ utf8-period-icase aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
BRE REG_ICASE '.' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
BRE REG_ICASE '.' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
redox: none solaris: bad
BRE REG_ICASE '.' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
sortix: bad
BRE REG_ICASE '.' on "æ" [0] matched "Ã" [0-1] instead of "æ" [0-2]
Copyright 2011-2026 Jonas 'Sortie' Termansen and contributors.
Sortix's source code is free software under the ISC license.
#sortix on irc.sortix.org
@sortix_org