mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
regex_escape: support POSIX basic regex (#50327)
This commit is contained in:
parent
874fd70d10
commit
e55e8fe2c4
3 changed files with 31 additions and 3 deletions
8
changelogs/fragments/regex-escape-basic.yaml
Normal file
8
changelogs/fragments/regex-escape-basic.yaml
Normal file
|
@ -0,0 +1,8 @@
|
|||
minor_changes:
|
||||
- |
|
||||
regex_escape - added re_type option to enable escaping POSIX BRE chars
|
||||
|
||||
This distinction is necessary because escaping non-special chars such as
|
||||
'(' or '{' turns them into special chars, the opposite of what is intended
|
||||
by using regex_escape on strings being passed as a Basic Regular
|
||||
Expression.
|
|
@ -1075,11 +1075,18 @@ To replace text in a string with regex, use the "regex_replace" filter::
|
|||
|
||||
.. versionadded:: 2.0
|
||||
|
||||
To escape special characters within a regex, use the "regex_escape" filter::
|
||||
To escape special characters within a standard python regex, use the "regex_escape" filter (using the default re_type='python' option)::
|
||||
|
||||
# convert '^f.*o(.*)$' to '\^f\.\*o\(\.\*\)\$'
|
||||
{{ '^f.*o(.*)$' | regex_escape() }}
|
||||
|
||||
.. versionadded:: 2.8
|
||||
|
||||
To escape special characters within a POSIX basic regex, use the "regex_escape" filter with the re_type='posix_basic' option::
|
||||
|
||||
# convert '^f.*o(.*)$' to '\^f\.\*o(\.\*)\$'
|
||||
{{ '^f.*o(.*)$' | regex_escape('posix_basic') }}
|
||||
|
||||
|
||||
Kubernetes Filters
|
||||
``````````````````
|
||||
|
|
|
@ -185,9 +185,22 @@ def ternary(value, true_val, false_val, none_val=None):
|
|||
return false_val
|
||||
|
||||
|
||||
def regex_escape(string):
|
||||
def regex_escape(string, re_type='python'):
|
||||
'''Escape all regular expressions special characters from STRING.'''
|
||||
if re_type == 'python':
|
||||
return re.escape(string)
|
||||
elif re_type == 'posix_basic':
|
||||
# list of BRE special chars:
|
||||
# https://en.wikibooks.org/wiki/Regular_Expressions/POSIX_Basic_Regular_Expressions
|
||||
return regex_replace(string, r'([].[^$*\\])', r'\\\1')
|
||||
# TODO: implement posix_extended
|
||||
# It's similar to, but different from python regex, which is similar to,
|
||||
# but different from PCRE. It's possible that re.escape would work here.
|
||||
# https://remram44.github.io/regex-cheatsheet/regex.html#programs
|
||||
elif re_type == 'posix_extended':
|
||||
raise AnsibleFilterError('Regex type (%s) not yet implemented' % re_type)
|
||||
else:
|
||||
raise AnsibleFilterError('Invalid regex type (%s)' % re_type)
|
||||
|
||||
|
||||
def from_yaml(data):
|
||||
|
|
Loading…
Reference in a new issue