I have the following mysql regex:
REGEXP '-v[0-9]{1,2}
Which catches -v01 and -v1 and -v03 and -v97, I want to add a dot . at the end of it:
-v01. and -v1. and -v03. and -v97.
I tried \. but that did not seem to work - even though it should.
What am I missing?
CodePudding user response:
You can do it using this regex :
REGEXP '-v[0-9]{1,2}\\. ?'
\\. will make sure at least one "." after 2 digits to be exist
CodePudding user response:
I think there are two solutions, maybe more
The First is,
Here is the code
"REGEXP_REPLACE(a,'(-v)([a-zA-Z0-9] )','\1\2.')
With backreferences \1\2 or $1$2
The Second is,
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)
The first code Regex101
The second code Regex101
CodePudding user response:
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 | val REGEXP '-v[0-9]{1,2}\.?' |
|---|---|
| -v01 | 1 |
| -v12 | 1 |
| -v97 | 1 |
| -x12 | 0 |
| -v01. | 1 |
| -v12. | 1 |
| -v97. | 1 |
