Perhaps because you have single quotes inside double quotes so everything 
inside the single quotes is automatically escaped?

Walter
--
Walter Rowe, Division Chief
Infrastructure Services Division
Mobile: 202.355.4123

On Jan 9, 2024, at 9:04 AM, Rob Wagner <[email protected]> wrote:

Right, but why doesn’t the \\d need to be double-backslashed?  Backslash-d is 
regex for matching on a digit.  I just don’t get why doubling the backslash is 
needed on the 1 but not on the d.

On Jan 9, 2024, at 7:53 AM, 'Rowe, Walter P. (Fed)' via Ansible Project 
<[email protected]> wrote:

 The \\1 must be double-backslashed because the backref needs to be 
backslash-digit (\1). Doubling the backslash escapes the backslash.

Walter
--
Walter Rowe, Division Chief
Infrastructure Services Division
Mobile: 202.355.4123

On Jan 8, 2024, at 6:57 PM, Rob Wagner <[email protected]> wrote:

Thanks Matt, but I still don't get why the first parameter (\\d) MAY be double 
backslashed but the second parameter (\\1) MUST be double backslashed.  
However, I'm starting to think it's at the python level.  
https://stackoverflow.com/a/33582215 says Python's string parser causes both \d 
and \\d to become \d.  But why?  A little more searching takes me to 
https://docs.python.org/3/reference/lexical_analysis.html#escape-sequences, 
where I think I see why \\1 becomes \1 and \1 becomes a non-printable character 
(octal 1).  But then, by analogy, \\d should become \d (it does) but why 
doesn't \d become an error (since it's not listed as a valid escape sequence).

Maybe I'll take this over to the Python list.

On Mon, Jan 8, 2024 at 4:52 PM Matt Martz 
<[email protected]<mailto:[email protected]>> wrote:
This is a result of some normalization code in jinja2 that attempts to unescape 
strings:

https://github.com/pallets/jinja/blob/d594969d722ceb4e8f3da8861befc9c0ac87ae1b/src/jinja2/lexer.py#L647-L653

That code results in those becoming '^p(\\d+).*$' and '\\1'.

Those 2 when statements, when processed by pyyaml become:

["( item | regex_replace('^p(\\d+).*$', '\\\\1') ) in s",
 "( item | regex_replace('^p(\\\\d+).*$', '\\\\1') ) in s"]

Then if we apply the .encode/.decode:

>>> "( item | regex_replace('^p(\\d+).*$', '\\\\1') ) in s".encode("ascii", 
>>> "backslashreplace").decode("unicode-escape")
"( item | regex_replace('^p(\\d+).*$', '\\1') ) in s"

>>> "( item | regex_replace('^p(\\\\d+).*$', '\\\\1') ) in s".encode("ascii", 
>>> "backslashreplace").decode("unicode-escape")
"( item | regex_replace('^p(\\d+).*$', '\\1') ) in s"

--
You received this message because you are subscribed to a topic in the Google 
Groups "Ansible Project" group.
To unsubscribe from this topic, visit 
https://groups.google.com/d/topic/ansible-project/A-QsBqBiWVk/unsubscribe.
To unsubscribe from this group and all its topics, send an email to 
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAD8N0v-Sf3AmrkEnFZZtxAbJHTUv%3D6gNezDkESTxoatHq-86YA%40mail.gmail.com<https://groups.google.com/d/msgid/ansible-project/CAD8N0v-Sf3AmrkEnFZZtxAbJHTUv%3D6gNezDkESTxoatHq-86YA%40mail.gmail.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to 
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAMc-rNPNqQMKKsqy2gwRBAt%2BEWnn%2B_rEY-CJo7sWJFhGnamLQQ%40mail.gmail.com<https://groups.google.com/d/msgid/ansible-project/CAMc-rNPNqQMKKsqy2gwRBAt%2BEWnn%2B_rEY-CJo7sWJFhGnamLQQ%40mail.gmail.com?utm_medium=email&utm_source=footer>.


--
You received this message because you are subscribed to a topic in the Google 
Groups "Ansible Project" group.
To unsubscribe from this topic, visit 
https://groups.google.com/d/topic/ansible-project/A-QsBqBiWVk/unsubscribe.
To unsubscribe from this group and all its topics, send an email to 
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/BECB61FE-847C-44CB-8FB2-6AC5489F052F%40nist.gov<https://groups.google.com/d/msgid/ansible-project/BECB61FE-847C-44CB-8FB2-6AC5489F052F%40nist.gov?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to 
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/1FB0916C-F39D-46F2-8544-1ED0FA528D5A%40gmail.com<https://groups.google.com/d/msgid/ansible-project/1FB0916C-F39D-46F2-8544-1ED0FA528D5A%40gmail.com?utm_medium=email&utm_source=footer>.

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/78355563-E8C3-42A9-939B-8F2A3D5E3316%40nist.gov.

Reply via email to