string: Also escape new lines with --style=regex

This isn't *required* in the PCRE2 spec but it greatly increases the utility of
escaped regex strings at the commandline.
This commit is contained in:
Mahmoud Al-Qudsi 2024-07-16 17:05:11 -05:00
parent 6020fc497a
commit fe63775ec5
2 changed files with 8 additions and 1 deletions

View file

@ -451,9 +451,13 @@ fn escape_string_var(input: &wstr) -> WString {
/// \param in is the raw string to be searched for literally when substituted in a PCRE2 expression.
fn escape_string_pcre2(input: &wstr) -> WString {
let mut out = WString::new();
out.reserve(input.len());
out.reserve(input.len() + input.len() / 2);
for c in input.chars() {
if c == '\n' {
out.push_str("\\n");
continue;
}
if [
'.', '^', '$', '*', '+', '(', ')', '?', '[', '{', '}', '\\', '|',
// these two only *need* to be escaped within a character class, and technically it

View file

@ -309,9 +309,12 @@ string escape --style=var 中 | string unescape --style=var
string escape --style=regex ".ext"
string escape --style=regex "bonjour, amigo"
string escape --style=regex "^this is a literal string"
string escape --style=regex "hello
world"
# CHECK: \.ext
# CHECK: bonjour, amigo
# CHECK: \^this is a literal string
# CHECK: hello\nworld
### Verify that we can correctly unescape the same strings
# we tested escaping above.