^(660122|660222) 和^(660122,660222) 有啥区别 oracle 正则表达式
时间: 2024-04-29 17:20:09 浏览: 109
在 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)`。
相关问题
oracle 正则表达式 含以660122,660222开头,但是不包含66012208,66012203,66022203,66012209,66012210,66012216
你可以尝试使用以下正则表达式来匹配以660122或660222开头,但不包含66012208,66012203,66022203,66012209,66012210和66012216的字符串:
^(660122|660222)(?!08|03|09|10|16)[0-9]{2}$
解释一下这个正则表达式:
- ^ 表示匹配字符串的开始位置。
- (660122|660222) 表示匹配以660122或660222开头的字符串。
- (?!08|03|09|10|16) 表示在660122或660222后面不能跟着08、03、09、10或16。
- [0-9]{2} 表示匹配两位数字。
- $ 表示匹配字符串的结束位置。
oracle 正则表达式匹配10个数字,以660122,660222开头,但是不包含66012208,66012203,66022203,66012209,66012210,66012216
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 的字符串。
阅读全文