Oracle正则表达式计算多次出现的用逗号包围的字符串

This question is similar to a previous question of mine. I am looking for a way to count a character string in a comma-separated list of values in a column in an Oracle (11g) SQL database. For example, suppose I have the following data:

SELECT ('SL,PK') as col1 FROM dual
    UNION ALL 
SELECT ('SL,CR,SL') as col1 FROM dual
    UNION ALL 
SELECT ('PK,SL') as col1 FROM dual
    UNION ALL 
SELECT ('SL,SL') as col1 FROM dual
    UNION ALL
SELECT ('SL') as col1 FROM dual
    UNION ALL
SELECT ('PK') as col1 FROM dual
    UNION ALL
SELECT ('PI,SL,PK') as col1 FROM dual
    UNION ALL 
SELECT ('PI,SL,SL,PK') as col1 FROM dual
    UNION ALL 
SELECT ('PI,SL,SL,SL,PK') as col1 FROM dual
    UNION ALL 
SELECT ('PI,SL,SL,SL,SL,PK') as col1 FROM dual
    UNION ALL 
SELECT ('PI,OSL,SL,PK') as col1 FROM dual
    UNION ALL 
SELECT ('PI,SL,SLR,PK') as col1 FROM dual

COL1
-----
SL,PK
SL,CR,SL
PK,SL
SL,SL
SL
PK
PI,SL,PK
PI,SL,SL,PK
PI,SL,SL,SL,PK
PI,SL,SL,SL,SL,PK
PI,OSL,SL,PK
PI,SL,SLR,PK

我希望严格计算子字符串'SL'的所有出现次数(即不包括'OSL','SLR'等)。理想的结果如下所示:

COL1                COL2
-----               -----
SL,PK               1
SL,CR,SL            2
PK,SL               1
SL,SL               2
SL                  1
PK                  0
PI,SL,PK            1
PI,SL,SL,PK         2
PI,SL,SL,SL,PK      3
PI,SL,SL,SL,SL,PK   4
PI,OSL,SL,PK        1
PI,SL,SLR,PK        1

I can accomplish this using length and regexp_replace:

SELECT 
    col1,
    (length(col1) - NVL(length(regexp_replace(regexp_replace(col1,'(^|,)(SL)($|,)','\1' || '' || '\3',1,0,'imn'),'(^|,)(SL)($|,)','\1' || '' || '\3',1,0,'imn')),0))/length('SL') as col2
FROM (
    SELECT ('SL,PK') as col1 FROM dual
        UNION ALL 
    SELECT ('SL,CR,SL') as col1 FROM dual
        UNION ALL 
    SELECT ('PK,SL') as col1 FROM dual
        UNION ALL 
    SELECT ('SL,SL') as col1 FROM dual
        UNION ALL
    SELECT ('SL') as col1 FROM dual
        UNION ALL
    SELECT ('PK') as col1 FROM dual
        UNION ALL
    SELECT ('PI,SL,PK') as col1 FROM dual
        UNION ALL 
    SELECT ('PI,SL,SL,PK') as col1 FROM dual
        UNION ALL 
    SELECT ('PI,SL,SL,SL,PK') as col1 FROM dual
        UNION ALL 
    SELECT ('PI,SL,SL,SL,SL,PK') as col1 FROM dual
        UNION ALL 
    SELECT ('PI,OSL,SL,PK') as col1 FROM dual
        UNION ALL 
    SELECT ('PI,SL,SLR,PK') as col1 FROM dual
)

COL1                COL2
-----               -----
SL,PK               1
SL,CR,SL            2
PK,SL               1
SL,SL               2
SL                  1
PK                  0
PI,SL,PK            1
PI,SL,SL,PK         2
PI,SL,SL,SL,PK      3
PI,SL,SL,SL,SL,PK   4
PI,OSL,SL,PK        1
PI,SL,SLR,PK        1

but was hoping for a more elegant solution, perhaps with regexp_count. I have achieved my goal successfully in other regex implementations that have the word boundary \b construct available (with \bSL\b), but have not found a solution for Oracle's regex.