在mysql中,通过正则表达式搜索这类值的最佳方法是什么?“de”/+19876543210@-def" ABCDE/ 表示不变的特定值 @-def 也表示不变的特定值我失败的尝试如下:
ABCDE/
@-def
SELECT BLAH FROM BLOOP WHERE (bloop.field REGEXP'^\\ABCDE/+1(123|234|345|456)[1-9]{7}@abc-def$')
rryofs0p1#
你没有逃走 + . 它在regex中有一个特殊的含义,意思是一次或多次。你可以用这个
+
^ABCDE\/\\+1(123|234|345|456)[1-9]{7}@abc-def$
演示
quhf5bfb2#
这个 + 是regexp元字符,因此如果要匹配文本,必须对其进行转义 + . 因为 \ 是一个字符串元字符,你也必须转义它。
\
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 | +----------+
我不知道你为什么 \\ 因为它与示例字符串不匹配。我不知道你的三位数是什么意思。是电话区号吗?你打算列出每个区号吗?
\\
2条答案
按热度按时间rryofs0p1#
你没有逃走
+
. 它在regex中有一个特殊的含义,意思是一次或多次。你可以用这个
演示
quhf5bfb2#
这个
+
是regexp元字符,因此如果要匹配文本,必须对其进行转义+
. 因为\
是一个字符串元字符,你也必须转义它。我不知道你为什么
\\
因为它与示例字符串不匹配。我不知道你的三位数是什么意思。是电话区号吗?你打算列出每个区号吗?