Escape backslashes (or custom escape character).
type(string) :: astring
logical :: test_passed(2)
astring = '^\s \d+\s*'
test_passed(1) = astring%escape(to_escape='\')//''=='^\\s \\d+\\s*'
test_passed(2) = astring%escape(to_escape='\', esc='|')//''=='^|\s |\d+|\s*'
print '(L1)', all(test_passed)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(string), | intent(in) | :: | self |
The string. |
||
character(kind=CK, len=1), | intent(in) | :: | to_escape |
Character to be escaped. |
||
character(kind=CK, len=*), | intent(in), | optional | :: | esc |
Character used to escape. |
Escaped string.
elemental function escape(self, to_escape, esc) result(escaped) !< Escape backslashes (or custom escape character). !< !<```fortran !< type(string) :: astring !< logical :: test_passed(2) !< astring = '^\s \d+\s*' !< test_passed(1) = astring%escape(to_escape='\')//''=='^\\s \\d+\\s*' !< test_passed(2) = astring%escape(to_escape='\', esc='|')//''=='^|\s |\d+|\s*' !< print '(L1)', all(test_passed) !<``` !=> T <<< class(string), intent(in) :: self !< The string. character(kind=CK, len=1), intent(in) :: to_escape !< Character to be escaped. character(kind=CK, len=*), intent(in), optional :: esc !< Character used to escape. type(string) :: escaped !< Escaped string. character(kind=CK, len=:), allocatable :: esc_ !< Character to escape, local variable. integer :: c !< Character counter. if (allocated(self%raw)) then esc_ = BACKSLASH ; if (present(esc)) esc_ = esc escaped%raw = '' do c=1, len(self%raw) if (self%raw(c:c)==to_escape) then escaped%raw = escaped%raw//esc_//to_escape else escaped%raw = escaped%raw//self%raw(c:c) endif enddo endif endfunction escape