פוסט זה מהווה המשך לפוסט הקודם בנושא. בחלק זה נכיר את העבודה הבסיסית עם הפונקציות – 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 >