Regex 正则表达式-字符串内的匹配
我一直在试图找到一个正则表达式,只匹配以下表达式中的数字,但我需要特定的组 例如: Vdsl 1.10.4 怎么可能匹配10个呢 我还需要一个匹配4的表达式 我使用的是正则表达式风格的Oracle SQL函数Regex_substr() 谢谢Regex 正则表达式-字符串内的匹配,regex,oracle,Regex,Oracle,我一直在试图找到一个正则表达式,只匹配以下表达式中的数字,但我需要特定的组 例如: Vdsl 1.10.4 怎么可能匹配10个呢 我还需要一个匹配4的表达式 我使用的是正则表达式风格的Oracle SQL函数Regex_substr() 谢谢 编辑: 我想我找到了一个解决办法: 使用REGEXP_SUBSTR()可以将其与点“.10”匹配。然后使用REGEXP_替换可以提取数字 REGEXP_替换(REGEXP_SUBSTR('Vdsl 1.10.4','.\d+), “.(\d+)”, “
编辑: 我想我找到了一个解决办法:
- 使用REGEXP_SUBSTR()可以将其与点“.10”匹配。然后使用REGEXP_替换可以提取数字 REGEXP_替换(REGEXP_SUBSTR('Vdsl 1.10.4','.\d+), “.(\d+)”, “\1”)
- 最后一个号码呢 REGEXP_REPLACE(REGEXP_SUBSTR('Vdsl 1.10.4','.\d+$), “.(\d+”, “\1”)
\(\d+)
;对于4,因为它在一个点之后,并且在末尾,所以你可以使用\(\d+)$
您可以使用适当的函数提取第一组,即您的号码。如果您不能或不想获得您可以使用的组:
(?由于10位于2个点之间,您可以使用\.(\d+)\.
,而对于4,由于它位于一个点之后,并且位于末尾,您可以使用\.(\d+)$
您可以使用适当的函数提取第一个组,即您的号码。如果您不能或不想获取该组,您可以使用:
(?您可以使用非常简单的正则表达式:
(?=\.([0-9]+))
对于最后一个:
([0-9]+)$
您可以使用非常简单的正则表达式:
(?=\.([0-9]+))
对于最后一个:
([0-9]+)$
Oracle 11g R2架构设置:
WITH DATA AS (
SELECT 'Vdsl 1.10.4' AS str
FROM DUAL
)
SELECT SUBSTR( REGEXP_SUBSTR( str, '\.\d+', 1, 1 ), 2 ) AS FIRST_NUMBER,
SUBSTR( REGEXP_SUBSTR( str, '\.\d+', 1, 2 ), 2 ) AS SECOND_NUMBER
FROM DATA
| FIRST_NUMBER | SECOND_NUMBER |
|--------------|---------------|
| 10 | 4 |
查询1:
WITH DATA AS (
SELECT 'Vdsl 1.10.4' AS str
FROM DUAL
)
SELECT SUBSTR( REGEXP_SUBSTR( str, '\.\d+', 1, 1 ), 2 ) AS FIRST_NUMBER,
SUBSTR( REGEXP_SUBSTR( str, '\.\d+', 1, 2 ), 2 ) AS SECOND_NUMBER
FROM DATA
| FIRST_NUMBER | SECOND_NUMBER |
|--------------|---------------|
| 10 | 4 |
:
WITH DATA AS (
SELECT 'Vdsl 1.10.4' AS str
FROM DUAL
)
SELECT SUBSTR( REGEXP_SUBSTR( str, '\.\d+', 1, 1 ), 2 ) AS FIRST_NUMBER,
SUBSTR( REGEXP_SUBSTR( str, '\.\d+', 1, 2 ), 2 ) AS SECOND_NUMBER
FROM DATA
| FIRST_NUMBER | SECOND_NUMBER |
|--------------|---------------|
| 10 | 4 |
Oracle 11g R2架构设置:
WITH DATA AS (
SELECT 'Vdsl 1.10.4' AS str
FROM DUAL
)
SELECT SUBSTR( REGEXP_SUBSTR( str, '\.\d+', 1, 1 ), 2 ) AS FIRST_NUMBER,
SUBSTR( REGEXP_SUBSTR( str, '\.\d+', 1, 2 ), 2 ) AS SECOND_NUMBER
FROM DATA
| FIRST_NUMBER | SECOND_NUMBER |
|--------------|---------------|
| 10 | 4 |
查询1:
WITH DATA AS (
SELECT 'Vdsl 1.10.4' AS str
FROM DUAL
)
SELECT SUBSTR( REGEXP_SUBSTR( str, '\.\d+', 1, 1 ), 2 ) AS FIRST_NUMBER,
SUBSTR( REGEXP_SUBSTR( str, '\.\d+', 1, 2 ), 2 ) AS SECOND_NUMBER
FROM DATA
| FIRST_NUMBER | SECOND_NUMBER |
|--------------|---------------|
| 10 | 4 |
:
WITH DATA AS (
SELECT 'Vdsl 1.10.4' AS str
FROM DUAL
)
SELECT SUBSTR( REGEXP_SUBSTR( str, '\.\d+', 1, 1 ), 2 ) AS FIRST_NUMBER,
SUBSTR( REGEXP_SUBSTR( str, '\.\d+', 1, 2 ), 2 ) AS SECOND_NUMBER
FROM DATA
| FIRST_NUMBER | SECOND_NUMBER |
|--------------|---------------|
| 10 | 4 |
是的,但我该如何删除前导点和跟踪点?@lindusilois我对Oracle不熟悉。你可以尝试其中一种方法或搜索更多信息。是的,但我该如何删除前导点和跟踪点?@lindusilois我对Oracle不熟悉。你可以尝试其中一种方法或搜索更多信息。没有点。应该吗d为10,不带点。应为10 Oracle不支持查找SQL@lindusiloislook ahead受支持吗?@lindusilois try:\([0-9]+)\。
这包括点,但我不想要them@lindusilois好的,请尝试:[0-9]{2}
Oracle不支持查找SQL@lindusilois是否支持look ahed?@lindusilois try:\([0-9]+)\。
这包括点,但我不想要them@lindusilois好的,试试:[0-9]{2}