oracle 正则表达式匹配10个数字,以660122,660222开头,但是不包含66012208,66012203,66022203,66012209,66012210,66012216
时间: 2024-02-24 15:55:35 浏览: 125
Oracle 正则表达式可以使用 POSIX 扩展正则表达式语法,可以使用以下正则表达式匹配符合要求的字符串:
```
^(660122|660222)(?!0[389]|1[06])\d{8}$
```
解释如下:
- `^`:表示字符串的开始位置。
- `(660122|660222)`:表示匹配以 660122 或 660222 开头的字符串。
- `(?!0[389]|1[06])`:使用否定预测先行断言来剔除不符合要求的字符串,表示匹配后面不是 08、03、09、10、16 的两位数字。
- `\d{8}`:表示匹配 8 个数字。
- `$`:表示字符串的结束位置。
因此,该正则表达式可以匹配以 660122 或 660222 开头,后面跟着 8 个数字,但不包含 66012208、66012203、66022203、66012209、66012210、66012216 的字符串。
相关问题
oracle正则表达式匹配字符串
Oracle使用正则表达式的语法是基于Perl的语法。以下是一些常见的正则表达式匹配字符串的例子:
1. 匹配包含"abc"的字符串:
```
SELECT * FROM your_table WHERE REGEXP_LIKE(your_column, 'abc');
```
2. 匹配以"abc"开头的字符串:
```
SELECT * FROM your_table WHERE REGEXP_LIKE(your_column, '^abc');
```
3. 匹配以"abc"结尾的字符串:
```
SELECT * FROM your_table WHERE REGEXP_LIKE(your_column, 'abc$');
```
4. 匹配包含数字的字符串:
```
SELECT * FROM your_table WHERE REGEXP_LIKE(your_column, '[0-9]');
```
5. 匹配包含字母的字符串:
```
SELECT * FROM your_table WHERE REGEXP_LIKE(your_column, '[a-zA-Z]');
```
6. 匹配包含特定单词的字符串:
```
SELECT * FROM your_table WHERE REGEXP_LIKE(your_column, '\<word\>');
```
其中,"\<"和"\>"用于指定单词的边界。
^(660122|660222) 和^(660122,660222) 有啥区别 oracle 正则表达式
在 Oracle 正则表达式中,`^(660122|660222)` 和 `^(660122,660222)` 表示的含义是不同的。
`^(660122|660222)` 表示匹配以 `660122` 或 `660222` 开头的字符串。其中,竖线 `|` 表示或的关系,括号用于分组。
`^(660122,660222)` 则表示匹配以 `660122,660222` 开头的字符串。其中,逗号 `,` 表示字符 `,` 的含义,不需要使用括号进行分组。
举个例子,对于字符串 `660122,660222,660333`,使用正则表达式 `^(660122|660222)` 可以匹配前两个部分 `660122` 和 `660222`,而使用正则表达式 `^(660122,660222)` 则无法匹配任何部分,因为字符串中逗号后面还有其他字符。
因此,在这个例子中,如果想匹配以 `660122` 或 `660222` 开头的字符串,应该使用 `^(660122|660222)`,而不是 `^(660122,660222)`。
阅读全文