我想在 ORACLE SQL 中使用正则表达式提取带有转义符号的字符串
I want to extract a string with escaping sign using regex in ORACLE SQL
我得到了一个包含多个可能答案的字符串,但只有一个是正确的:
- "shop.com\nshop.net\nvouchers.com [[WIN]]"
- "39 欧元 [[获胜]]\n49 Euro\n59"
- “Euro 7 things\n12 东西[[WIN]]\n21 东西”
我需要提取 right/winning 答案:
- "vouchers.com"
- “39 欧元”
- “12 件事”
感谢您的帮助
如果您的数据包含换行 CHR(10)
个字符,那么您可以使用:
SELECT REGEXP_SUBSTR(value, '^(.*)\[\[WIN\]\]$', 1, 1, 'm', 1) AS match
FROM table_name
其中,对于示例数据:
CREATE TABLE table_name (value) AS
SELECT 'shop.com
shop.net
vouchers.com [[WIN]]' FROM DUAL UNION ALL
SELECT '39 Euro [[WIN]]
49 Euro
59' FROM DUAL UNION ALL
SELECT 'Euro 7 things
12 things[[WIN]]
21 things' FROM DUAL;
输出:
MATCH
vouchers.com
39 Euro
12 things
如果您的数据包含 \n
个双字符子字符串,则:
SELECT REGEXP_SUBSTR(value, '^(.*\n)?(.*?)\[\[WIN\]\]\s*($|\n)', 1, 1, NULL, 2)
AS match
FROM table_name
db<>fiddle here
我得到了一个包含多个可能答案的字符串,但只有一个是正确的:
- "shop.com\nshop.net\nvouchers.com [[WIN]]"
- "39 欧元 [[获胜]]\n49 Euro\n59"
- “Euro 7 things\n12 东西[[WIN]]\n21 东西”
我需要提取 right/winning 答案:
- "vouchers.com"
- “39 欧元”
- “12 件事”
感谢您的帮助
如果您的数据包含换行 CHR(10)
个字符,那么您可以使用:
SELECT REGEXP_SUBSTR(value, '^(.*)\[\[WIN\]\]$', 1, 1, 'm', 1) AS match
FROM table_name
其中,对于示例数据:
CREATE TABLE table_name (value) AS
SELECT 'shop.com
shop.net
vouchers.com [[WIN]]' FROM DUAL UNION ALL
SELECT '39 Euro [[WIN]]
49 Euro
59' FROM DUAL UNION ALL
SELECT 'Euro 7 things
12 things[[WIN]]
21 things' FROM DUAL;
输出:
MATCH vouchers.com 39 Euro 12 things
如果您的数据包含 \n
个双字符子字符串,则:
SELECT REGEXP_SUBSTR(value, '^(.*\n)?(.*?)\[\[WIN\]\]\s*($|\n)', 1, 1, NULL, 2)
AS match
FROM table_name
db<>fiddle here