MySQL的REGEX查询带有特殊字符的字母数字值

时间:2019-01-08 17:04:35

标签: mysql regex

在MySQL中通过正则表达式搜索这种类型的值的最佳方法是什么?

“ ABCDE / + 19876543210 @ abc-def”

case class Employee(id: String, name: String, experience: Int) case class Manager(employee: Employee) object Your_Code extends App { def promoteEmployee(employee: Employee) = Manager(employee) def promoteEmployeesToManager(list: List[Employee]) : Set[Manager] = { list.foldLeft(Set[Manager]())((a, b) => if(b.experience > 5) a + promoteEmployee(b) else a) } val employess = List(Employee("id1", "name1", 6), Employee("id1", "name1", 4)) println(promoteEmployeesToManager(employess)) } 表示不变的特定值

ABCDE/也代表不变的特定值

我在下面的失败尝试:

@abc-def

2 个答案:

答案 0 :(得分:1)

您没有逃脱+。它在正则表达式中有特殊含义,表示一个或多个时间。

您可以使用这个

^ABCDE\/\\+1(123|234|345|456)[1-9]{7}@abc-def$

Demo

答案 1 :(得分:0)

+是一个正则表达式元字符,因此,如果要匹配文字+,则必须对其进行转义。而且由于\是一个字符串元字符,所以您也必须对其进行转义。

mysql> select 'ABCDE/+19876543210@abc-def' regexp 
  '^ABCDE/\\+1(123|234|345|456)[0-9]{7}@abc-def$' as is_match;
+----------+
| is_match |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

mysql> select 'ABCDE/+12346543210@abc-def' regexp 
  '^ABCDE/\\+1(123|234|345|456)[0-9]{7}@abc-def$' as is_match;
+----------+
| is_match |
+----------+
|        1 |
+----------+

我不知道您为什么在正则表达式模式中使用\\,因为这与示例字符串不匹配。

我不确定您的数字三位数是多少。他们是电话区号吗?您打算列出每个区号吗?