oracle 使用正则pattern中 (?:\d+)- ,数字后面怎么会有空客
时间: 2024-06-03 14:06:44 浏览: 109
这可能是因为您的模式中使用了非捕获组 `(?:...)`,这意味着在匹配数字后面的 `-` 时,只会考虑该组中的内容,而不会把空格作为匹配的一部分。
例如,如果您的模式是 `(?:\d)-`,并且要匹配字符串 `1 - 2 - 3`,则该模式将匹配第一个 `-`,因为它后面跟着数字 `2`,而不会匹配第二个 `-`,因为它后面有一个空格。
如果您希望空格也被考虑在内,您可以将模式更改为 `\d\s*-\s*`,这将匹配任何数字后面的空格和横线,而不仅仅是紧挨着数字的横线。
相关问题
oracle 使用正则解释(?:\d+)- 请详细解释为何会匹配一个数字和一个空格
正则表达式中的 `(?:\d )` 表示匹配一个数字和一个空格,其中 `?:` 是一个非捕获组的语法。也就是说,这个组匹配的内容不会被记住或者存储在匹配结果中。
`\d` 表示匹配一个数字字符,而空格表示匹配一个空格字符。所以 `(?:\d )` 匹配一个数字字符和一个空格字符的组合。
例如,对于字符串 "1 ",正则表达式 `(?:\d )` 将匹配到 "1 " 中的 "1 "。
在 Oracle 中,可以使用 REGEXP_LIKE 函数来判断一个字符串是否符合正则表达式。例如:
```
SELECT REGEXP_LIKE('1 ', '(?:\d )') FROM dual;
```
这个查询将返回 TRUE,因为 "1 " 符合正则表达式 `(?:\d )` 的要求。
oracle正则表达式[:cutrl:]
这是一个Oracle正则表达式中的字符类,表示匹配ASCII码值在0-31、127之间的字符。其中:
- ^ 表示取反,即匹配不在该范围内的字符。
- c 表示匹配具体的字符,例如c可以是a、b、c、d等等。
- - 表示范围,例如r-t表示匹配r、s、t三个字符。
因此,[:cntrl:]可以匹配控制字符,如回车、换行符、制表符等。
阅读全文