【发布时间】:2019-08-08 20:39:05
【问题描述】:
我正在尝试编写一个正则表达式,它从给定的文本中获取最小和最大宽度和长度。 例如。我有几个示例文本如下。
1. S-BARE-w<=1250;L<=4000
2. S-BARE-w<=1250;4000<L<=6500
3. S-BARE-1250<w<=1550;L<=4000
4. S-BARE-1250< w<=1550;4000<L<=6500
在此我需要获取最小值和最大值。我正在尝试使用REGEXP_SUBSTR 来实现这一点。我正在使用以下带有匹配参数 i 和 x 的正则表达式。
我正在使用 4 个正则表达式字符串。 \d{4}(?=<W) 找到最小宽度,(?<=W<=)\d{4} 找到最大宽度,\d{4}(?=<L) 找到最小长度,(?<=L<=)\d{4} 找到最大长度。组合正则如下。
\d{4}(?=<W)|(?<=W<=)\d{4}|\d{4}(?=<L)|(?<=L<=)\d{4}
但上述正则表达式对所有 4 个参数(即 minm_width、maxm_width、minm_length、maxm_length)返回 null。
在RegEx Simulator 上尝试时,上述这些正则表达式给出了正确的值。
但是当我使用REGEXP_SUBSTR 在oracle 上尝试正则表达式时,它会返回NULL。
Oracle语句如下。
WITH TEST_DATA AS
(SELECT 'S-BARE-w<=1250;L<=4000' TXT_REMARKS FROM DUAL
UNION SELECT 'S-BARE-w<=1250;4000<L<=6500' TXT_REMARKS FROM DUAL
UNION SELECT 'S-BARE-1250<w<=1550;L<=4000' TXT_REMARKS FROM DUAL
UNION SELECT 'S-BARE-1250<w<=1550;4000<L<=6500' TXT_REMARKS FROM DUAL)
SELECT TXT_REMARKS,
REGEXP_SUBSTR (TXT_REMARKS, '\d{4}(?=<W)', 1, 1, 'i') WIDTH_MIN,
REGEXP_SUBSTR (TXT_REMARKS, '(?<=W<=)\d{4}', 1, 1, 'i') WIDTH_MAX,
REGEXP_SUBSTR (TXT_REMARKS, '\d{4}(?=<L)', 1, 1, 'i') LENGTH_MIN,
REGEXP_SUBSTR (TXT_REMARKS, '(?<=L<=)\d{4}', 1, 1, 'i') LENGTH_MAX
FROM TEST_DATA;
感谢您提供解决此问题的任何帮助。提前致谢。
【问题讨论】:
标签: regex oracle regexp-substr