פוסט זה מהווה המשך לפוסט הקודם בנושא. בחלק זה נכיר את העבודה הבסיסית עם הפונקציות – regexp_instr, regexp_substr,regexp_replace

regexp_instr

פונקציה זו, הפועלת בצורה דומה לפונקציית ה instr מחזירה מיקום של ביטוי בתוך טקסט.

נייצר טבלת דמו לפי הסינטקס הבא :

RAM > CREATE TABLE names

  2  AS

  3  SELECT rownum AS ID, last_name AS NAME

  4  FROM hr.employees ;

Table created


ונציג את מיקום התו
't' בחמשת העובדים הראשונים

RAM > SELECT name , regexp_instr(name ,'t')

  2  FROM names

  3  WHERE rownum <= 5 ;

NAME                      REGEXP_INSTR(NAME,'T')

------------------------- ----------------------

Abel                                           0

Ande                                           0

Atkinson                                       2

Austin                                         4

Baer                                           0

 

נציג את מיקום התו 'e' בחמשת העובדים הראשונים

RAM >

RAM > SELECT name , regexp_instr(name ,'e')

  2  FROM names

  3  WHERE rownum <= 5 ;

NAME                      REGEXP_INSTR(NAME,'E')

------------------------- ----------------------

Abel                                           3

Ande                                           4

Atkinson                                       0

Austin                                         0

Baer                                           3

נציג את מיקום הרצף 'ae'

RAM >

RAM > SELECT name , regexp_instr(name ,'ae')

  2  FROM names

  3  WHERE rownum <= 5 ;

NAME                      REGEXP_INSTR(NAME,'AE')

------------------------- -----------------------

Abel                                            0

Ande                                            0

Atkinson                                        0

Austin                                          0

Baer                                            2

נשתמש ב '[ ]' כדי להציג את מיקום התווים 'a' או 'e'

RAM >

RAM > SELECT name , regexp_instr(name ,'[ae]')

  2  FROM names

  3  WHERE rownum <= 5 ;

NAME                      REGEXP_INSTR(NAME,'[AE]')

------------------------- -------------------------

Abel                                              3

Ande                                              4

Atkinson                                          0

Austin                                            0

Baer                                              2

נציג שוב את מיקום התווים 'a' או 'e' כך ש

·       בעמודה הראשונה – החיפוש יעשה החל מהתו הראשון

·       בעמודה השניה – החיפוש יעשה החל מהתו הרביעי

RAM >

RAM > SELECT  id,

  2     name ,

  3     regexp_instr(name ,'[ae]')   AS COL_1,

  4     regexp_instr(name ,'[ae]',4) AS COL_2

  5  FROM names

  6  WHERE id BETWEEN 10 AND 20 ;

        ID NAME                       COL_1  COL_2

---------- ------------------------- ------ ------

        10 Bernstein                      2      7

        11 Bissot                         0      0

        12 Bloom                          0      0

        13 Bull                           0      0

        14 Cabrio                         2      0

        15 Cambrault                      2      6

        16 Cambrault                      2      6

        17 Chen                           3      0

        18 Chung                          0      0

        19 Colmenares                     5      5

        20 Davies                         2      5

11 rows selected.

נציג שוב את מיקום התווים 'a' או 'e' כך ש

·       בעמודה הראשונה – החיפוש יעשה החל מהתו הראשון

·       בעמודה השניה – החיפוש יעשה החל מהתו הרביעי

·       בעמודה השלישית – החיפוש יעשה החל מהתו הרביעי ויציג את מיקום המופע השני של התווים 'a' או 'e'

RAM >

RAM > SELECT    id,

  2     name ,

  3     regexp_instr(name ,'[ae]')     AS COL_1,

  4     regexp_instr(name ,'[ae]',4)   AS COL_2,

  5     regexp_instr(name ,'[ae]',4,2) AS COL_3

  6  FROM names

  7  WHERE id BETWEEN 10 AND 20 ;

        ID NAME                       COL_1  COL_2  COL_3

---------- ------------------------- ------ ------ ------

        10 Bernstein                      2      7      0

        11 Bissot                         0      0      0

        12 Bloom                          0      0      0

        13 Bull                           0      0      0

        14 Cabrio                         2      0      0

        15 Cambrault                      2      6      0

        16 Cambrault                      2      6      0

        17 Chen                           3      0      0

        18 Chung                          0      0      0

        19 Colmenares                     5      5      7

        20 Davies                         2      5      0

11 rows selected.

נמשיך לפתח את הקוד ונציג שוב את מיקום התווים 'a' או 'e' כך ש

·       בעמודה הראשונה – החיפוש יעשה החל מהתו הראשון

·       בעמודה השניה – החיפוש יעשה החל מהתו הרביעי

·       בעמודה השלישית – החיפוש יעשה החל מהתו הרביעי ויציג את מיקום המופע השני של התווים 'a' או 'e'

·       בעמודה הרביעית – החיפוש יעשה החל מהתו הרביעי ויציג את מיקום המופע השני של התווים 'a' או 'e' (הדיפולט, זהה לעמודה הקודמת)

·       בעמודה החמישית – החיפוש יעשה החל מהתו הרביעי ויציג את מיקום המופע השני + 1 של התווים 'a' או 'e'

·       בעמודה השישית – החיפוש יעשה החל מהתו הרביעי ויציג את מיקום המופע השני של התווים 'a' או 'e' כאשר החיפוש עצמו לא יהיה Case Sensitive

RAM >

RAM > SELECT  id,

  2     name ,

  3             regexp_instr(name ,'[ae]')              AS COL_1,

  4             regexp_instr(name ,'[ae]',4)            AS COL_2,

  5             regexp_instr(name ,'[ae]',4,2)          AS COL_3,

  6             regexp_instr(name ,'[ae]',4,2,0)        AS COL_4,

  7             regexp_instr(name ,'[ae]',4,2,1)        AS COL_5,

  8             regexp_instr(name ,'[ae]',4,2,0, 'i')   AS COL_6

  9  FROM names

 10  WHERE id BETWEEN 10 AND 20 ;

        ID NAME         COL_1  COL_2  COL_3  COL_4  COL_5  COL_6

---------- ----------- ------ ------ ------ ------ ------ ------

        10 Bernstein        2      7      0      0      0      0

        11 Bissot           0      0      0      0      0      0

        12 Bloom            0      0      0      0      0      0

        13 Bull             0      0      0      0      0      0

        14 Cabrio           2      0      0      0      0      0

        15 Cambrault        2      6      0      0      0      0

        16 Cambrault        2      6      0      0      0      0

        17 Chen             3      0      0      0      0      0

        18 Chung            0      0      0      0      0      0

        19 Colmenares       5      5      7      7      8      7

        20 Davies           2      5      0      0      0      0

11 rows selected.

regexp_substr

פונקציה זו הפועלת בדומה לפונקציית ה substr מחזירה תת מחרוזת מתוך טקסט.

נייצר טבלת דמו ונאכלס אותה לפי הסינטקס הבא :

RAM > DROP TABLE text ;

Table dropped.

RAM > CREATE TABLE text

  2  (text_col varchar2(50)) ;

Table created.

RAM > INSERT INTO text VALUES ('text 324 text 45321 text 12232');

1 row created.

RAM > SELECT *

  2  FROM text ;

TEXT_COL

--------------------------------------------------

text 324 text 45321 text 12232

נציג את הספרה הראשונה מתוך הטקסט

RAM >

RAM > SELECT regexp_substr(text_col , '[0-9]') AS COL_1

  2  FROM text ;

COL_1

--------------------------------------------------

3

נציג את שתי הספרות הראשונות מתוך הטקסט

RAM >

RAM > SELECT regexp_substr(text_col , '[0-9]{2}') AS COL_1

  2  FROM text ;

COL_1

--------------------------------------------------

32

ניתן להשתמש בסימן ה '+' כדי להציג את כל הספרות הקיימות במופע הראשון

RAM >

RAM > SELECT regexp_substr(text_col , '[0-9]+') AS COL_1

  2  FROM text ;

COL_1

--------------------------------------------------

324

ננחה את חיפוש הספרות להתבצע החל מהמיקום ה 9

RAM >

RAM > SELECT regexp_substr(text_col , '[0-9]+' , 9) AS COL_1

  2  FROM text ;

COL_1

------------------------------------------

45321

ננחה את חיפוש הספרות להתבצע החל מהמיקום ה 9 ולהחזיר את מופע הספרות הראשון (זהה לדוגמא הקודמת)

RAM >

RAM > SELECT regexp_substr(text_col , '[0-9]+' , 9 , 1) AS COL_1

  2  FROM text ;

COL_1

------------------------------------------

45321

ננחה את חיפוש הספרות להתבצע החל מהמיקום ה 9 ולהחזיר את מופע הספרות השני

RAM >

RAM > SELECT regexp_substr(text_col , '[0-9]+' , 9 , 2) AS COL_1

  2  FROM text ;

COL_1

------------------------------------------

12232

RAM >

regexp_replace

לסיום נעשה היכרות בסיסית עם פונקצית ה regexp_replace אשר בדומה לפונצקית ה replace מבצעת החלפות ביטויים בתוך מחרוזת.

RAM > SELECT * FROM text ;

TEXT_COL

------------------------------

text 324 text 45321 text 12232

בדוגמא זו אנו מחליפים את כל האותיות בסימן ה '$'

RAM >

RAM > SELECT regexp_replace(text_col , '[a-z]' , '$') AS COL_1

  2  FROM text ;

COL_1

------------------------------

$$$$ 324 $$$$ 45321 $$$$ 12232

בדוגמא הבאה אנו מחליפים את כל האותיות בסימן ה '$' החל מהתו התשיעי

RAM >

RAM > SELECT regexp_replace(text_col , '[a-z]' , '$' , 9) AS COL_1

  2  FROM text ;

COL_1

------------------------------

text 324 $$$$ 45321 $$$$ 12232

RAM >