帮我用hivesql写一段正则匹配,能够筛选出合规的手机号
时间: 2023-02-08 08:53:24 浏览: 1677
在 Hive SQL 中,可以使用正则表达式来筛选手机号。下面是一段示例代码:
```
SELECT *
FROM table_name
WHERE regexp_like(column_name, '^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$');
```
上面的代码将在 "table_name" 表中查询 "column_name" 列,筛选出符合中国大陆手机号格式的数据。
说明:
1. 正则表达式 '^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$' 用来匹配大陆地区合法手机号。
2. regexp_like() 函数是 Hive SQL 中用来判断正则匹配的函数。
3. 如果要匹配其他国家的手机号,需要修改正则表达式,满足相应国家的手机号格式。
相关问题
用hive SQL写个字段去除空格后用正则匹配手机号的代码
### 回答1:
```
SELECT
regexp_replace(trim(column_name),'^(1[3|4|5|7|8][0-9]{9})|(\\+861[3|4|5|7|8][0-9]{9})$') as phone_number
FROM table_name;
```
说明:
- `trim(column_name)` 用来去除前后空格。
- `regexp_replace(trim(column_name),'^(1[3|4|5|7|8][0-9]{9})|(\\+861[3|4|5|7|8][0-9]{9})$')` 用来替换匹配到的手机号。正则表达式`^(1[3|4|5|7|8][0-9]{9})|(\\+861[3|4|5|7|8][0-9]{9})$` 匹配11位手机号码或者国内手机号前加+86的手机号码。
- `as phone_number` 用来给查询结果起别名。
- `FROM table_name` 指定查询的表。
注意:
- 确保hive 版本支持正则函数
- 更改表名和字段名
- 更改正则表达式根据你的需要。
### 回答2:
在Hive SQL中,我们可以使用正则表达式函数和字符串函数来实现字段去除空格后匹配手机号的代码。
首先,使用正则表达式函数`regexp_replace`去除字段中的空格,然后使用字符串函数`regexp_extract`提取匹配的手机号。
以下是代码示例:
```sql
SELECT col_name
FROM table_name
WHERE regexp_extract(regexp_replace(col_name, '\\s', ''), '(13[0-9]|14[579]|15[0-35-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}', 0) != '';
```
其中,`col_name`代表要匹配的字段名,`table_name`代表表名。
代码中使用了`regexp_replace(col_name, '\\s', '')`去除字段中的所有空格。反斜杠需要使用两个,因为在字符串中需要转义。
然后,将去除空格的结果作为第一个参数传递给`regexp_extract`函数,使用`'(13[0-9]|14[579]|15[0-35-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}'`作为正则表达式匹配手机号的模式。
最后,通过判断提取结果是否为空字符串,来筛选出匹配的手机号。
这样,我们就可以通过以上代码在Hive SQL中实现字段去除空格后匹配手机号的操作。
用java写一段正则匹配车牌号
好的,以下是用Java写一段正则匹配车牌号的代码:
```java
String regex = "[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}";
String plateNumber = "粤A12345";
if (plateNumber.matches(regex)) {
System.out.println("车牌号格式正确");
} else {
System.out.println("车牌号格式不正确");
}
```
这段代码使用了正则表达式来匹配车牌号,其中:
- [\u4e00-\u9fa5]{1} 表示匹配一个汉字,用于表示车牌号的省份简称;
- [A-Z]{1} 表示匹配一个大写字母,用于表示车牌号的第一个字母;
- [A-Z_0-9]{5} 表示匹配五个字符,可以是大写字母、数字或下划线,用于表示车牌号的后五位。
如果车牌号符合以上规则,则匹配成功,输出"车牌号格式正确",否则输出"车牌号格式不正确"。