Doubt with Regular Expression (REGEXP_REPLACE)

Hi for All,
how can I get the expected result using regexp_replace?
With Tab As( Select 1 Id, ' .XX ( A => B' TXT From dual Union All
             Select 1 Id, ' , C => 783 );'     TXT From dual )
SELECT REGEXP_REPLACE(Upper(TXT || Lead(TXT)Over(Partition BY id Order BY rownum))
                     ,'(^.*XX *\(.+,.+)(\d+)( *\) *;.*$)','\2') AA
  FROM tab
AA
3
, C => 783 );
Expected result
AA
783
, C => 783 );Regards,

Hi,
This gets the right results, perhaps for the right reason:
SELECT  REGEXP_REPLACE ( Upper(TXT || Lead (TXT) Over (Partition BY id Order BY rownum))
                       , '(^.*XX *\(.+,\D+)(\d+)( *\) *;.*$)','\2'
                 )      AS AA
FROM tab
;That is, change the 2nd '.+' to '\D+'.
Consider this regular expression:
SELECT     REGEXP_REPLACE ( 'C => 783'
                 , '(.+)(\d+)'
                 , '\2'
                 )     AS aa
FROM     dual
;Clearly, the 1st argument matches the pattern in the 2nd, but how? All of the interpretations below are equally valid:
\1          \2
C => 78          3
C => 7          83
C =>           783When there is a choice like this, it seems that \1 is made as big as possible.

Similar Messages

  • Doubt with Regular Expression

    Hi for All,
    how can I get the expected result using regexp_substr or regexp_replace?
    with tab as
    Select 'TEST( XX_XXXXXX, 12 ) ; AAAA'  txt from dual union all
    Select 'TEST( AAAAAAAAA , 67 ); 1234'  txt from dual union all
    Select 'TEST( 92233 ,   47   ); 5234'  txt from dual union all
    Select 'TEST( AAAAAAAAA , AA ); 897'   txt from dual union all
    Select 'TEST( CCCCC 25 );'             txt from dual union all
    Select 'TEST CCCCC, 45 );'             txt from dual union all
    Select 'TEST( EDCCCC, 45 ;)'           txt from dual union all
    Select 'TEST(BBBBBBBBB,12);'           txt from dual
    Select regexp_substr(txt, '[^.*,. *][[:digit:]][^\).*$]') from tab
    REGEXP_SUBSTR(TXT,'[^.*,.*][[:
    12
    67
    922
    897
    25
    45
    45
    8 rows selected
    Mandatory Criteria
    "TEST" And "(" And "," And ")" And ";"
    expected result
    12
    67
    47
    Null
    Null
    Null
    Null
    12Regards,

    Something like:
    with tab as
    Select 'TEST( XX_XXXXXX, 12 ) ; AAAA'  txt from dual union all
    Select 'TEST( AAAAAAAAA , 67 ); 1234'  txt from dual union all
    Select 'TEST( 92233 ,   47   ); 5234'  txt from dual union all
    Select 'TEST( AAAAAAAAA , AA ); 897'   txt from dual union all
    Select 'TEST( CCCCC 25 );'             txt from dual union all
    Select 'TEST CCCCC, 45 );'             txt from dual union all
    Select 'TEST( EDCCCC, 45 ;)'           txt from dual union all
    Select 'TEST(BBBBBBBBB,12);'           txt from dual
    select  txt,
            case
              when regexp_like(txt,'^TEST\(.+, *\d+ *\) *;.*$') then regexp_replace(txt,'(^TEST\(.+, *)(\d+)( *\) *;.*$)','\2')
            end expected_result
      from  tab
    TXT                          EXPECTED_RESULT
    TEST( XX_XXXXXX, 12 ) ; AAAA 12
    TEST( AAAAAAAAA , 67 ); 1234 67
    TEST( 92233 ,   47   ); 5234 47
    TEST( AAAAAAAAA , AA ); 897
    TEST( CCCCC 25 );
    TEST CCCCC, 45 );
    TEST( EDCCCC, 45 ;)
    TEST(BBBBBBBBB,12);          12
    8 rows selected.
    SQL> SY.

  • Regular expression - REGEXP_REPLACE

    Hello everyone,
    I have a small issue with regular expression. Look at the following example:
    WITH T as (SELECT 'ABC' as a  FROM dual
               UNION ALL
               SELECT 'ABC.Test' FROM DUAL
               UNION ALL
               SELECT 'XXX' FROM DUAL
    SELECT a,
           regexp_replace(a, '^(ABC)?(\.)?(.+)$','ABC.\3')
      FROM tDon't pay attention to the regexp I did. It's wrong.
    What I want is :
    - when my string start with something else than ABC, it is replaced by the same string with ABC. in front of it.
    - When the string starts with ABC. something, nothing changes
    - When the string is ABC (without the final dot) the string doesn't change.
    Any idea how I can do that using regexp_replace? (I'm using Oracle 10g)
    Thanks

    Dang... Almost:
    SQL> WITH T as (SELECT 'ABC' as a  FROM dual
      2             UNION ALL
      3             SELECT 'ABC.Test' FROM DUAL
      4             UNION ALL
      5             SELECT 'XXX.Test' FROM DUAL
      6             UNION ALL
      7             SELECT 'XXX' FROM DUAL
      8  )
      9  SELECT a,
    10         CASE
    11            WHEN NOT (a = 'ABC' OR a like 'ABC.%') THEN 'ABC.'
    12         END || a test_case,
    13         regexp_replace(a,'((^ABC$)|(^ABC\.)|(.*))','ABC.\4',1,1) test_reg
    14    FROM t;
    A        TEST_CASE    TEST_REG
    ABC      ABC          ABC.
    ABC.Test ABC.Test     ABC.Test
    XXX.Test ABC.XXX.Test ABC.XXX.Test
    XXX      ABC.XXX      ABC.XXXExcept there is a dot too much in the first case :-(
    But so close ;-)

  • Grouping & Back-references with regular expressions on Replace Text window

    I really appreciate the inclusion of the Regular Expressions in the search & replace feature. One thing I am missing is back-references in the replacement expression. For instance, in the unix tools vi or sed, I might do something like this:
    s/\(firstPart\) \(secondPart\) \(oldThirdPart\)/\2 \1 newThirdPart/g
    which would allow me to switch the places of firstPart and secondPart, and totally replace thirdPart. If grouping and back-references are already present in the Replace Text window, how does one correctly invoke them?

    duplicate of Grouping & Back-references with regular expressions on Replace Text window

  • Assistance with Regular Expression and Tcl

    Assistance with Regular Expression and Tcl
    Hello Everyone,
      I recently began learning Tcl to develop scripts for automating network switch deployments. 
    In my script, I want to name the device with a location and the last three octets of the base mac address.
    I can get the Base MAC address by : 
    show version | include Base
     Base ethernet MAC Address       : 00:00:00:DB:CE:00
    And I can get the last three octets of the MAC address using the following regular expression. 
    ([0-9a-f]{2}[:-]){2}([0-9a-f]{2}$)
    But I have not been able to figure out how to call the regular expression in the tcl script.
    I have checked several resources but have not been able to figure it out.  Suggestions?
    Ultimately, I want to set the last three octets to a variable (something like below) and then call the variable when I name the switch.
    set mac [exec "sh version | i Base"] (include the regular expression)
    ios_config "hostname location$mac"
    Thanks for any assistance in advance.
    Chris

    This worked for me.
    Switch_1(tcl)#set result [exec show ver | inc Base]   
    Base ethernet MAC Address       : 00:1B:D4:F8:B1:80
    Switch_1(tcl)#regexp {([0-9A-F:]{8}\r)} $result -> mac
    1
    Switch_1(tcl)#puts $mac                               
    F8:B1:80
    Switch_1(tcl)#ios_config "hostname location$mac"      
    %Warning! Hostname should contain at least one alphabet or '-' or '_' character
    locationF8:B1:80(tcl)#

  • How to search with regular expression

    I make pdx files so that I can search text quickly. But Acrobat doesn't provide a way to search with regular expression. I'm wondering if there is a way that I don't know to search for regular expression in Acrobat Pro 9?

    First, Acrobat must "mount" the PDX.
    As "Find" does not use the cataloged index, use Shift+Ctrl+F to open the advanced search dialog.
    It may be helpful to first enter Acrobat Preferences and for the Search category tick "Always use advanced search options".
    Back to the Search dialog - use the drop down menu for "Look In" to pick "Select Index" then, if no PDXs show, click the Add button.
    In the Open Index File dialog, browse to the location of the desired PDX and select it.
    OK out and use "Return results containing" to pick a "Match ..." requirement or Boolean.
    To become familiar with query syntax, for Acrobat, it is good to review Acrobat Help.
    http://help.adobe.com/en_US/Acrobat/9.0/Professional/WS58a04a822e3e50102bd615109794195ff-7 c4b.w.html
    Be well...

  • Problem with Regular Expression

    Hi There!!
    I have a problem with regular expression. I want to validate that one word and second word are same. For that I have written a regex
    Pattern p=Pattern.compile("([a-z][a-zA-Z]*)\\s\1");
    Matcher m=p.matcher("nikhil nikhil");
    boolean t=m.matches();
    if (t)
              System.out.println("There is a match");
         else
              System.out.println("There is no match");
    The result I am getting is always "There is no match
    Your timely help will be much appreciated.
    Regards

    Ram wrote:
    ErasP wrote:
    You are missing a backward slash in the regex
    Pattern p = Pattern.compile("([a-z][a-zA-Z]*)\\s\\1");
    But this will fail in this case.
    Matcher m = p.matcher("Nikhil Nikhil");It is the reason for that *[a-z]*.The OP had [a-z][a-zA-Z]* in his code, so presumably he know what that means and wants that String not to match.

  • Get the string between li tags, with regular expression

    I have a unordered list, and I want to store all the strings between the li tags (<li>.?</li>)in an array:
    <ul>
    <li>This is String One</li>
    <li>This is String Two</li>
    <li>This is String Three</li>
    </ul>
    This is what have so far:
    <li>(.*?)</li>
    but it is not correct, I only want the string without the li tags.
    Thanks.

    No one?
    Anoyone here experienced with Regular Expression?

  • Help with Regular Expressions and regexp_replace

    Oh great Oracle Guru can I can gets some help
    I need to clean up the phone numbers that have been entered in Oracle eBusiness per_phones table. Some of the phone numbers have dashes, some have spaces and some have char. I would just like to take all the digits out and then re-format the number.
    Ex.
    914-123-1234 .. output (914) 123-1234
    9141231234 ..again (914) 123-1234
    914 123 1234 .. (914) 123-1234
    myphone ... just null
    (914)-123-1234.. (914) 123-1234
    I really tried to understand the regular expressions statments, but for some reason I just can't understand it.

    Hi,
    Welcome to the forum!
    I would create a user-defined function for this. I expect there will be a lot of exceptions to the regular rules (for example, strings that do not contain exactly 10 digits, such as '1-800-987-6543') that can be handled, but would require lots of nested fucntions and othwer complicted code if you had to do it in a single statement.
    If you really want to do it with a regular expression:
    SELECT     phone_txt
    ,     REGEXP_REPLACE ( phone_txt
                     , '^\D*'          || -- 0 or more non-digits at the beginning of the string
                           '(\d\d\d)'     || -- \1 = 3 consecutive digits
                    '\D*'          || -- 0 or more non-digits
                           '(\d\d\d)'     || -- \2 = 3 consecutive digits
                    '\D*'          || -- 0 or more non-digits
                           '(\d\d\d)'     || -- \3 = 4 consecutive digits
                    '\D*$'             -- 0 or more non-digits at the end of the string
                     , '(\1) \2-\3'
                     )          AS new_phone_txt
    FROM    table_x
    ;

  • Extract values with Regular Expression

    How to extract values into [ ] using regular expression.
    With data As
    Select 'AAAAAA[10] AAA: 19C' Txt From Dual Union all
    Select 'XX[450]-10A' Txt From Dual Union all
    Select '[5]AVC19C' Txt From Dual Union all
    Select 'FVD[120]D2AC' Txt From Dual
    )I hope this return
    10
    450
    5
    120Thanks in advanced

    user11118871 wrote:
    Thanks for all.
    Hi BluShadow, can you explain what this is doing!?
    ThanksSure.
    Search for ----------------|           /------- Replace the found pattern in the search string with backreference 1
                         /------------\   /\       (the first thing backreferenced in the search string)
    regexp_replace(txt, '^.*\[(.*)\].*$','\1')
                         |\/\/\--/\/\/|
                         | \ \  /  \ \|
                         | | |  |  | |\- End of string
                         | | |  |  | |
                         | | |  |  | \- Any number of characters
                         | | |  |  |
                         | | |  |  \- Right square bracket (escaped)
                         | | |  |
                         | | |  \- any characters (backreferenced by round brackets)
                         | | |
                         | | \- Left square bracket (escaped)
                         | |
                         | \- Any number of characters
                         |
                         \- Start of stringEdited by: BluShadow on Jun 29, 2009 2:19 PM

  • Search with regular expression like this "[^\(]+mytype"

    I tried regular expression which find me line which has "mytype" but does not precede with "("
    I wrote it like this:    [^\(]+mytype
    It works perfectly with python reg exp. But it does not work in MSVC 2013 search(ctrl+shift+f). Do you know why? Is it bug?
    Is there a way to find variable definition with search function through whole project

    Hi Vit,
    According to your description, you mean that when you use the
    ctrl+shift+f shortcut key to search which line has "mytype" word in the whole project from VS2013 IDE like the following screen shot, but it does not work
    in VS2013 IDE, am I right?
    If yes, could you please provide me a screen shot about how you search the
    mytype?
    Generally, when we used the
    ctrl+shift+f shortcut key to search, it works fine in VS IDE. Therefore, to check if you install some third-party Add-ins impact your VS IDE, I suggest you can search
    the mytype in VS safe mode check if you get same issue.
    Reference:
    http://msdn.microsoft.com/en-us/library/ms241278.aspx
    (1)If you did not get same issue, I doubt that you may be install some Add-ins impact the VS IDE, so I suggest
    you can try to disable or un-install them and then check this issue again.
    (2)If you still get same issue, I suggest you can try to reset the VS setting file or you can try to repair your
    VS check this issue again.
    In addition, I suggest you can try to use Ctrl + F shortcut key to search the mytype word.
    If I misunderstand your issue, please provide me more detail message about your issue.
    Best Regards,
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Replace replace with regular expression possible?

    Hi,
    Just another regular expression question!
    I want to replace the words "AND", "OR", "NOT" in a sentence with the symbols '&', '|', '~' respectively.
    Obviously very simple to do with 3 replace statements, just wonder if I can use regexp_replace to achieve it?
    Cheers

    Hi,
    Metacharacter symbols can be used in place of regular expressions.
    Here's an implementation scenario:
    http://www.oracle.com/technology/obe/obe10gdb/develop/regexp/regexp.htm
    Hope it helps.
    Regards,
    Naveed.

  • Replace with regular expression -complex logics

    What is the best way to replace input string with following rules:
    1. All occurences of two or more sequential Hyphen-symbols (symbol: "-") must be replaced with one hypen. So if input string was "---" then output should be "-". If input was "a-a-a" then output stays as it is.
    2. All occurences of two or more sequential Space-symbols (symbol: " ") must be replaced with one Space. So if input string was " " then output should be " ". If input was "a a a" then output stays as it is.
    3. After rules 1-2 are applied following rule apply: All occurences of Space-symbol followed immediately after Hypen-symbol or vice vers- hypen followed by Space must be replaced with Hypen. So if input string was " -" or "- " then output should be "-". If input was "a a-a" then output stays as it is.
    4. After rules 1-2-3 are apllied following rule must be applied: String start and end symbol may not be Space or Hypen. So if input string was " a" or "-a" or "a " or "a-" then output should be "a".
    All rules 1-4 must be apllied to input string.
    Example of the replacement logic:
    input: 'a aa ---- ss-ee -'
    output: 'a aa-ss-ee'
    I think i should use function "regexp_replace" somehow.
    This solution below doesn't work because it outputs two consecuent hypens "--":
    with t as(
    select 'a   aa ---- ss-ee -' str from dual
    select regexp_replace(str, '--','-') a from t;
    /*a   aa -- ss-ee -*/Can you suggest one neat regular expression for that?

    SQL>with t as(
      2   select 1 id,'a   aa ---- ss-ee -' str from dual union
      3   select 2, 'a        aa -------- ss-ee ---- - - -' str from dual union
      4   select 3, '-' str from dual union
      5   select 4, '----- -- -a -' str from dual union
      6   select 5, '-a-a-a-a----a-a-a-' str from dual
      7  )
      8  select id,
      9  str,
    10  trim(trim('-' from regexp_replace(str, '( |-){2,}', '\1'))) new_str,
    11  length(str) len,
    12  length(trim(trim('-' from regexp_replace(str, '( |-){2,}', '\1')))) new_len
    13  from t;
    ID STR                                 NEW_STR                      LEN          NEW_LEN
      1 a   aa ---- ss-ee -                 a aa ss-ee                    19               10
      2 a     aa -------- ss-ee ---- - - -  a aa ss-ee                    34               10
      3 -                                                                  1
      4 ----- -- -a -                       a                             13                1
      5 -a-a-a-a----a-a-a-                  a-a-a-a-a-a-a                 18               13

  • Extended Replace with Regular Expressions

    I am trying to figure out how to user regular expressions in
    HomeSite 5.5 extended search and replace.
    I am trying to find all matches to: <span
    class="someClass">FooText</span>
    And replace with: <sometag>FooText</sometag>
    I have been able to get the find part working with reg ex:
    <span class=\"someClass\">*[A-Za-z0-9_
    ><.="']*</span>
    However, I have not been able to figure out what to put in
    the replace box. I have tried different combinations of syntax with
    "\1" for the first match of the reg ex in the search field, but
    nothing has worked.
    Can someone help me out with the syntax for what I should
    enter in the replace field?

    SQL>with t as(
      2   select 1 id,'a   aa ---- ss-ee -' str from dual union
      3   select 2, 'a        aa -------- ss-ee ---- - - -' str from dual union
      4   select 3, '-' str from dual union
      5   select 4, '----- -- -a -' str from dual union
      6   select 5, '-a-a-a-a----a-a-a-' str from dual
      7  )
      8  select id,
      9  str,
    10  trim(trim('-' from regexp_replace(str, '( |-){2,}', '\1'))) new_str,
    11  length(str) len,
    12  length(trim(trim('-' from regexp_replace(str, '( |-){2,}', '\1')))) new_len
    13  from t;
    ID STR                                 NEW_STR                      LEN          NEW_LEN
      1 a   aa ---- ss-ee -                 a aa ss-ee                    19               10
      2 a     aa -------- ss-ee ---- - - -  a aa ss-ee                    34               10
      3 -                                                                  1
      4 ----- -- -a -                       a                             13                1
      5 -a-a-a-a----a-a-a-                  a-a-a-a-a-a-a                 18               13

  • Need help with regular expression

    I'm trying to use the java.util.regex package to extract URLs from html files.
    The URLs that I am interested in extracting from the HTML look like the following:
    <font color="#008000">http://forum.java.sun.com -
    So, the URL is always preceeded by:
    <font color="#008000">
    and then followed by a space character and then a hyphen character. I want to be able to put all these URLs in a Vector object. This doesn't seem like it should be too difficult but for some reason I can't get anywhere with it. Any help would be greatly appreciated. Thanks!

    hi gupta am not sure of the java syntax but i can tell u about the regular expression...try this....
    <font color="#008000">(http:\/\/[a-zA-Z0-9.]+) [-]
    i dont know the java methods to call...just the reg exp...
    Sanjay Acharya

Maybe you are looking for