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

时间:2015-07-11 17:02:00

标签: regex oracle

我一直在尝试找到一个正则表达式来匹配以下表达式中的数字,但我需要某个组。

例如:

Vdsl 1.10.4

如何匹配 10

我还需要一个匹配 4

的表达式

P.S我用作正则表达式的Oracle SQL函数regex_substr()

由于

编辑:

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

  • 使用REGEXP_SUBSTR(),您可以将其与点匹配:'。10。'之后使用REGEXP_REPLACE可以提取数字。

    REGEXP_REPLACE(REGEXP_SUBSTR('Vdsl 1.10.4','。\ d +。'),              '(\ d +)。',              '\ 1')

  • 和最后一个号码

    REGEXP_REPLACE(REGEXP_SUBSTR('Vdsl 1.10.4','。\ d + $'),              '(\ d +)',              '\ 1')

3 个答案:

答案 0 :(得分:0)

由于10在2点之间,你可以使用\.(\d+)\.和4,因为它在一个点之后并且结束时你可以使用\.(\d+)$

您可以使用正确的功能并提取您的号码的第一组。如果您不能或不想获得该群组,则可以使用look-around

(?<=\.)\d+(?=\.)

详细了解基本正则表达式http://www.regular-expressions.info/

答案 1 :(得分:0)

您可以使用非常简单的RegEx:

$ssql = "ALTER TABLE qolak AUTO_INCREMENT ='$rownum'";

最后一个:

(?=\.([0-9]+))

答案 2 :(得分:0)

SQL Fiddle

Oracle 11g R2架构设置

查询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

<强> Results

| FIRST_NUMBER | SECOND_NUMBER |
|--------------|---------------|
|           10 |             4 |