[英]Add a dot to a mysql regex
我有以下 mysql 正則表達式:
REGEXP '-v[0-9]{1,2}'
其中捕獲-v01
和-v1
以及-v03
和-v97
,我想添加一個點.
最后:
-v01.
和-v1.
和-v03.
和-v97.
這樣它只捕獲版本號后跟點。
我試過\.
但這似乎不起作用——盡管它應該起作用。
我錯過了什么?
WITH cte AS (
SELECT '-v01' val UNION ALL
SELECT '-v12' UNION ALL
SELECT '-v97' UNION ALL
SELECT '-x12' UNION ALL
SELECT '-v01.' UNION ALL
SELECT '-v12.' UNION ALL
SELECT '-v97.'
)
SELECT val, val REGEXP '-v[0-9]{1,2}\\.?' FROM cte
值 | val REGEXP '-v[0-9]{1,2}\.?' |
---|---|
-v01 | 1個 |
-v12 | 1個 |
-v97 | 1個 |
-x12 | 0 |
-v01。 | 1個 |
-v12。 | 1個 |
-v97。 | 1個 |
你可以使用這個正則表達式來做到這一點:
REGEXP '-v[0-9]{1,2}\\.+?'
\\.+ will make sure at least one "." after 2 digits to be exist
這適用於 mysql 8。
在舊的 mysql 上你不能使用 +? 和 *? 它拋出repetition-operator operand invalid
I think there are two solutions, maybe more
第一個是,
Here is the code
"REGEXP_REPLACE(a,'(-v)([a-zA-Z0-9]+)','\1\2.')
With backreferences \1\2 or $1$2
第二個是,
SELECT obs, REGEXP_REPLACE (obs, '$', '.') AS RESULT
FROM (SELECT 'asda -v01' AS obs FROM DUAL
UNION ALL
SELECT 'aaaa -v12' AS obs FROM DUAL
UNION ALL
SELECT '123 -v97' AS obs FROM DUAL
UNION ALL
SELECT 'v42 -x12' AS obs FROM DUAL
UNION ALL
SELECT '-v01' AS obs FROM DUAL
UNION ALL
SELECT '-v12' AS obs FROM DUAL
UNION ALL
SELECT '-v97' AS obs FROM DUAL)
第一個代碼Regex101
第二個代碼Regex101
這是適用於所有 mysql 版本的有效解決方案。
REGEXP '-v[0-9]{1,2}\\.{1,}?'
\\.{1,} instead of \\.+ will work fine with no *repetition-operator operand invalid* error.
It will make sure at least one "." after 2 digits to be exist
似乎您正在使用舊版本的 mysql。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.