substr( regexp_substr(data,':[^:]+:[^:]+:[^:]+*', 1, 1),
length(regexp_substr(data,':[^:]+:[^:]+:*', 1, 1)) + 6
)
我无法访问data
代表的reg_substr
内容。当我试图检查一些任意(虚拟)数据时,我得到null
作为结果。请解释一下reg表达式':[^:]+:[^:]+:[^:]+*'
代表的例子。谢谢。
:
在reg表达中的意义是什么。
答案 0 :(得分:1)
科隆并不特别。这将匹配单个冒号,后跟任何不是冒号(多个字符),后跟冒号,然后是......
我不确定最后的星号是什么 - 我不认为它有任何影响(可能是一个错误)。
据我所知,此命令将返回6个格式的字符:a:b:c(表示':[^:]:[^:]:[^:]'将是等效的正则表达式)。
答案 1 :(得分:1)
我刚在在线正则表达式调试器上尝试过,您可以在此处查看结果http://regex101.com/r/vG5oV3以及正则表达式各部分的说明。
如果你在问题中使用正则表达式,结尾'+ *'没有任何意义,也不是正确的正则表达式(正如Liath在评论中提到的那样)
在[]之外的 :
是表达式中匹配的字符,而[^:]+
表示从一个字符到不受限制的字符匹配:
所以它首先找到第一个:
然后匹配所有字符,直到找到另一个:
然后再次这样做,共计三次。
答案 2 :(得分:1)
这是一个例子。第三列是一个等价的正则表达式,在我看来更短/更清楚:
SQL> with t as
2 ( select 'abc:de:fghijk:lmnopqrs:tuvw:xyz' data from dual union all
3 select 'abcde:fg:hi:jklmnopqr:s:tu:v:wxyz' from dual union all
4 select ':abcde:fg:hi:jklmnopqr:s:tu:v:wxyz' from dual
5 )
6 select data
7 , substr
8 ( regexp_substr(data,':[^:]+:[^:]+:[^:]+*', 1, 1)
9 , length(regexp_substr(data,':[^:]+:[^:]+:*', 1, 1)) + 6
10 )
11 , substr(regexp_substr(data,':[^:]+',1,3),7)
12 from t
13 /
DATA SUBSTR(REGEXP_SUBSTR(DATA,':[^:]+: SUBSTR(REGEXP_SUBSTR(DATA,':
---------------------------------- ---------------------------------- ----------------------------
abc:de:fghijk:lmnopqrs:tuvw:xyz qrs qrs
abcde:fg:hi:jklmnopqr:s:tu:v:wxyz opqr opqr
:abcde:fg:hi:jklmnopqr:s:tu:v:wxyz
3 rows selected.
的问候,
罗布。
答案 3 :(得分:1)
正则表达式:
:[^:]+:[^:]+:[^:]+*
匹配
:
字符:
:
字符:
:
字符:
,而是结尾的*
意味着此前一个匹配[^:]+
匹配零次或多次。< / LI>
[^:]+*
有效,但没有多大的语义意义 - 相反,它可以重写为等效表达式[^:]*
(零或多字符不是冒号:
)
查询1 :
WITH strings AS (
SELECT ':abcd:efg:hijk' AS string FROM DUAL
UNION ALL SELECT 'test :1234:5:' FROM DUAL
UNION ALL SELECT '::x:y::' FROM DUAL
)
SELECT string,
REGEXP_SUBSTR( string, ':[^:]+:[^:]+:[^:]+*' ),
REGEXP_SUBSTR( string, ':[^:]+:[^:]+:[^:]+' ),
REGEXP_SUBSTR( string, ':[^:]+:[^:]+:[^:]*' )
FROM strings
<强> Results 强>:
| STRING | REGEXP_SUBSTR(STRING,':[^:]+:[^:]+:[^:]+*') | REGEXP_SUBSTR(STRING,':[^:]+:[^:]+:[^:]+') | REGEXP_SUBSTR(STRING,':[^:]+:[^:]+:[^:]*') |
|----------------|---------------------------------------------|--------------------------------------------|--------------------------------------------|
| :abcd:efg:hijk | :abcd:efg:hijk | :abcd:efg:hijk | :abcd:efg:hijk |
| test :1234:5: | :1234:5: | (null) | :1234:5: |
| ::x:y:: | :x:y: | (null) | :x:y: |