Home > Software engineering >  Regex split string by two consecutive pipe ||
Regex split string by two consecutive pipe ||

Time:01-06

I want to split below string by two pipe(|| ) regex .

Input String

value1=data1||value2=da|ta2||value3=test&user01|

Expected Output

value1=data1
value2=da|ta2
value3=test&user01|

I tried ([^||] ) but its consider single pipe | also to split .

Try out my example - Regex

value2 has single pipe it should not be considered as matching.

I am using lua script like

for pair in string.gmatch(params, "([^||] )") do 
 print(pair) 
end

CodePudding user response:

the easiest way is to replace the sequence of 2 characters || with any other character (e.g. ;) that will not be used in the data, and only then use it as a separator:

local params = "value1=data1||value2=da|ta2||value3=test&user01|"

for pair in string.gmatch(params:gsub('||',';'), "([^;] )") do 
 print(pair) 
end

if all characters are possible, then any non-printable characters can be used, according to their codes: string.char("10") == "\10" == "\n" even with code 1: "\1"

string.gmatch( params:gsub('||','\1'), "([^\1] )" )

CodePudding user response:

You can explicitly find each ||.

$ cat foo.lua
s = 'value1=data1||value2=da|ta2||value3=test&user01|'

offset = 1
for idx in string.gmatch(s, '()||') do
    print(string.sub(s, offset, idx - 1) )
    offset = idx   2
end
if offset <= #s   1 then
    print(string.sub(s, offset) )
end
$ lua foo.lua
value1=data1
value2=da|ta2
value3=test&user01|
  • Related