2017-08-18 3 views
0

Ich bin ein wenig neu zu Regex und habe eine einfache Regex geschrieben, um das Wort "Vorschau" aus der Zeichenfolge unten abrufen.Entfernen Apostrophe von Regrex Muster

Zeit: '333333333333333333316: 06: 55 -232.323' Permission: 'Vorschau' Lehrer Name: '4444444444444ffffffffffff' Student: 'cccccccccccssssssssss' Prüfungser: 'eeeeeeeeeeeA'

Dies ist mein regulärer Ausdruck unter

Permission:\s?'([a-zA-z]+)'\s?Teacher name 

möchte ich nicht meine regulären Ausdruck erstellen Apostrophe in ihm zu haben.

Ich plane, diese Regex in Ausdruck in einer Oracle-Abfrage zu verwenden, und es scheint nicht meine Regex mit Apostroph sehr gut zu konsumieren.

Wie mache ich das?

Ich weiß, Regex hat viele Formate, also wenn jemand ein besseres Muster kennt, bitte zögern Sie nicht zu empfehlen.

+0

Bitte [formatieren Sie Ihre Frage] (https://stackoverflow.com/help/formatting). –

+1

FYI: Beachten Sie, dass ['[a-zA-z]' mehr als nur Buchstaben entspricht] (https://stackoverflow.com/a/29771926/3832970). –

Antwort

1

Sie können Ihre aktuellen RegexMuster (korrigiert gemäß Wiktor Kommentar!) Verwenden, indem Sie die einfachen Anführungszeichen zu entkommen:

regexp_substr(<your string>, 'Permission:\s?''([a-zA-Z]+)''\s?Teacher name') 

oder mehr sauber von the alternative quoting mechanism mit:

regexp_substr(<your string>, q'[Permission:\s?'([a-zA-Z]+)'\s?Teacher name]') 

mit dem Sie verlassen die einzelnen Anführungszeichen wie sie ursprünglich waren, und setzen das Ganze in eine Reihe von abgegrenzten einfachen Anführungszeichen, mit einem Trennzeichen, das nicht in Ihrem eigentlichen Inhalt erscheint - ich habe hier eckige Klammern verwendet, so q'[ ... ]'. Das lässt, was auch immer innen ist, der ... Teil, unescaped einfache Anführungszeichen einschließen.

Demos:

with t (str) as (
    select q'[Time: '333333333333333333316:06:55 -232323' Permission: 'Preview' Teacher name: '4444444444444ffffffffffff' Student: 'cccccccccccssssssssss' Exam score: 'eeeeeeeeeeeA']' from dual 
) 
select regexp_substr(str, 'Permission:\s?''([a-zA-Z]+)''\s?Teacher name') 
from t; 

REGEXP_SUBSTR(STR,'PERMISSION:\S?' 
---------------------------------- 
Permission: 'Preview' Teacher name 

oder:

with t (str) as (
    select q'[Time: '333333333333333333316:06:55 -232323' Permission: 'Preview' Teacher name: '4444444444444ffffffffffff' Student: 'cccccccccccssssssssss' Exam score: 'eeeeeeeeeeeA']' from dual 
) 
select regexp_substr(str, q'[Permission:\s?'([a-zA-Z]+)'\s?Teacher name]') 
from t; 

REGEXP_SUBSTR(STR,Q'[PERMISSION:\S 
---------------------------------- 
Permission: 'Preview' Teacher name 

Um nur das Wort 'Vorschau' Sie regexp_replace() mit einem Back-Referenz verwenden können:

with t (str) as (
    select q'[Time: '333333333333333333316:06:55 -232323' Permission: 'Preview' Teacher name: '4444444444444ffffffffffff' Student: 'cccccccccccssssssssss' Exam score: 'eeeeeeeeeeeA']' from dual 
) 
select regexp_replace(str, 
    '(.*Permission:\s?'')([a-zA-Z]+)(''\s?Teacher name.*)', '\2', 1, 1) 
from t; 

REGEXP_ 
------- 
Preview 

oder

with t (str) as (
    select q'[Time: '333333333333333333316:06:55 -232323' Permission: 'Preview' Teacher name: '4444444444444ffffffffffff' Student: 'cccccccccccssssssssss' Exam score: 'eeeeeeeeeeeA']' from dual 
) 
select regexp_replace(str, 
    q'[(.*Permission:\s?')([a-zA-Z]+)('\s?Teacher name.*)]', '\2', 1, 1) 
from t; 

REGEXP_ 
------- 
Preview