我需要在Oracle SQL中使用regex_count(无\b
可用)
并且我需要计算一个字符串中的值(格式为(\d{1,}[a-zA-Z]{0,2})
(例如123
,123a
,34bc
,而不是32abc
)其他(或其他噪音)至少一个空格,例如
'34 64 84' - should count to 3
'34 fh84h d88f 34 ' - should count to 2
'a54. 374 4/5' - should count 1
'5,5' - should count 0
'10a' - should count 1
'20g 32lf 43vnd kf34ld' - count 2
'9A_10' - counts 0
类似的东西。
(^|\s|\b)(\d{1,}[a-zA-Z]{0,2})($|\s)
-但是在Oracle SQL中这些不是\b
,而且我不确定它是否有效。
有人提出建议吗?
答案 0 :(得分:4)
我建议复制每个空格并添加开头/结尾空格,然后运行简单的(^|\s)<YOUR_PATTERN>($|\s)
模式:
SELECT REGEXP_COUNT(' ' || REGEXP_REPLACE('a54. 374 4/5', '(\s)', '\1 ') || ' ', '(^|\s)\d+[a-zA-Z]{0,2}($|\s)') FROM DUAL
详细信息
' ' ||
-添加领先空间REGEXP_REPLACE('a54. 374 4/5', '(\s)', '\1 ')
-匹配并捕获所有空白,并用其自身加上空格替换|| ' '
-添加尾随空格。现在,运行(^|\s)\d+[a-zA-Z]{0,2}($|\s)
正则表达式时您的计数将是正确的(请注意+
等于{1,}
)。
(^|\s)
-字符串的开头,空格\d+
-1个以上数字[a-zA-Z]{0,2}
-0到2个字母($|\s)
-字符串或空格的结尾。