Please don't take my comments as a rebuke for not following the rules - at the time you wrote your post the rules were not there to be followed.
However you didn't answer my question as to whether the tags can be nested. Therefore the following assumes that they cannot be as this greatly simplifies the pattern.
The simplest (and possibly fragile) pattern is:
<ul\b[^>]*>(.*?)</ul>
where you will need to have the 'singleline' (and possibly the 'ignore case') option(s) set.
A somewhat more robust pattern is:
<ul\b[^>]*>(((?!</?ul).)*)</ul>
with the same options set. The 2nd pattern will not pick up badly formed tags whereas the first one will match incorrectly.
In both cases, the text between the tags will be in match group #1.
If the tags can be nested, then let us know and we can show you the full (but very complex) pattern that will handle this (at least you are using PHP's PCRE regex library which has the required extensions to its capabilities).
However, I would strongly recommend that you look at the HTML DOM for this as it will save you lots of time and frustration both now and when your code needs to be maintained in the future.
Susan