Thanks everyone.  I'm going to chalk this up to a Python anomaly.  IMO,
since \d is not a valid escape sequence, Python should raise an error
rather than transparently converting it into \\d.

On Thu, Jan 11, 2024 at 6:19 PM Matt Martz <[email protected]> wrote:

> Part of the problem is also knowing what characters are escape sequences
> in python.
>
> \1 is an escape sequence, equivalent to `\x01`, and not equivalent to the
> literal `\1`.  As such a literal `\1` needs to be represented in python as
> `\\1`. \d is not an escape sequence and thus can be written as a literal
> `\d` without escaping the `\`
>
> There is also a difference with quoting in YAML as mentioned above,
> between single quotes and double quotes.  But note that the behavior of
> YAML with quotes only applies to quotes that surround the entire YAML
> value.  So the single quotes you have in the middle of your string do not
> affect the YAML quoting differences.  When not using quotes surrounding the
> full value in YAML, you are using "Plain Style" which has different rules
> than both single and double quoted values.
>
> YAML single quotes are basically equivalent to python raw strings, where a
> backslash is always treated as literal. Double quotes require escaping
> backslashes.  You can read more about the flow scalar styles of YAML at
> https://yaml.org/spec/1.2.2/#73-flow-scalar-styles
>
> On Tue, Jan 9, 2024 at 8:37 AM Rob Wagner <[email protected]> wrote:
>
>> But the \1 is also inside single and double quotes, so if that were the
>> reason, I wouldn’t have to double backslash the 1
>>
>> On Jan 9, 2024, at 9:19 AM, 'Rowe, Walter P. (Fed)' via Ansible Project <
>> [email protected]> wrote:
>>
>>  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]> 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].
>>> 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].
>> 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].
>> 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].
>> 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 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].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ansible-project/78355563-E8C3-42A9-939B-8F2A3D5E3316%40nist.gov
>> <https://groups.google.com/d/msgid/ansible-project/78355563-E8C3-42A9-939B-8F2A3D5E3316%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].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ansible-project/A83D8221-8497-43CF-AC07-4F80822197FA%40gmail.com
>> <https://groups.google.com/d/msgid/ansible-project/A83D8221-8497-43CF-AC07-4F80822197FA%40gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>
>
> --
> Matt Martz
> @sivel
> sivel.net
>
> --
> 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].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/CAD8N0v_Ai8qW4CSZaVBxYdk195wxGbmZHshAQ-D4keTrz-7Vag%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CAD8N0v_Ai8qW4CSZaVBxYdk195wxGbmZHshAQ-D4keTrz-7Vag%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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAMc-rNNbXibEUmJq2TO9djLxciVhdx%2B-opC3iUQC4vOYQmCkyA%40mail.gmail.com.

Reply via email to