Interpret Interval Notation Interval notation is a way to write complicated range bounds more conveniently and concisely than writing an inequality. The challenge, should you choose to accept it, is to write a program or function that interprets a subset of interval notation. In this subset, intervals are a comma-separated pair of integers delimited by either brackets, parentheses, or both.
The range starts from the first integer ends at the second integer, inclusive if delimited by a bracket or exclusive if by parentheses. Multiple ranges, delimited by U, may be chained together, in which case duplicate elements are removed.
Input is a string in interval notation and output is a list of numbers contained in the specified interval. Only meaningful intervals are valid, so ranges may overlap, but the start will always be less than the end. Zero sized intervals should have an empty output. All integers in the interval must be displayed once and only once, but may be outputted in any particular order.
This is code-golf so the lowest byte count wins.
Other Details

Invalid inputs are undefined behavior
a ∪ or ⋃ symbol may be used instead of U
The U will always be between ranges, never in front or behind
If your language uses a character other than - to represent negative numbers that may be used instead

Test Cases
[0,5] -&gt; [0,1,2,3,4,5]
(0,5] -&gt; [1,2,3,4,5]
[0,5) -&gt; [0,1,2,3,4]
(0,5) -&gt; [1,2,3,4]
[9,13] -&gt; [9,10,11,12,13]
[-5,-1] -&gt; [-5,-4,-3,-2,-1]
[-5,-1) -&gt; [-5,-4,-3,-2]
(-5,-1] -&gt; [-4,-3,-2,-1]
(-5,-1) -&gt; [-4,-3,-2]
[-3,2] -&gt; [-3,-2,-1,0,1,2]
[-3,2) -&gt; [-3,-2,-1,0,1]
(-3,2] -&gt; [-2,-1,0,1,2]
(-3,2) -&gt; [-2,-1,0,1]
[0,0] -&gt; [0]
(0,0] -&gt; []
[0,0) -&gt; []
(0,0) -&gt; []
[1,2) -&gt; [1]
(1,2) -&gt; []
[-3,0)U(0,3] -&gt; [-3,-2,-1,1,2,3]
[-3,0)U[0,3] -&gt; [-3,-2,-1,0,1,2,3]
[-3,0]U[0,3] -&gt; [-3,-2,-1,0,1,2,3]
[-3,0]U[2,5] -&gt; [-3,-2,-1,0,2,3,4,5]
[1,5]U[2,4] -&gt; [1,2,3,4,5]
[-5,-1]U[-6,-2] -&gt; [-5,-4,-3,-2,-1,-6]
[-5,-1]U[-6,0] -&gt; [-6,-5,-4,-3,-2,-1,0]
[-5,-1]U[-6,-2]U[-7,0] -&gt; [-7,-6,-5,-4,-3,-2,-1,0]
[1,2)U[2,3)U[3,4)U[4,5) -&gt; [1,2,3,4]
[2,1) -&gt; Undefined
U(5,10) -&gt; Undefined
[13,18)U -&gt; Undefined
Python 3, 79 bytes

lambda s:eval('{*range%s}'%s.translate({91:40,40:'(1+',93:'+1)',85:',*range'}))

Try it online!
-6 bytes thanks to ovs
-3 bytes thanks to dingledooper