Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-字符串内的匹配_Regex_Oracle - Fatal编程技术网

Regex 正则表达式-字符串内的匹配

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+)”, “

我一直在试图找到一个正则表达式,只匹配以下表达式中的数字,但我需要特定的组

例如:

Vdsl 1.10.4

怎么可能匹配10个呢

我还需要一个匹配4的表达式

我使用的是正则表达式风格的Oracle SQL函数Regex_substr()

谢谢


编辑:

我想我找到了一个解决办法:

  • 使用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”)


因为10在2点之间,所以你可以使用
\(\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}