2017-08-18 5 views
0

私は正規表現に少し新しく、以下の文字列から単語 "Preview"を検索する簡単な正規表現を書いています。regrexパターンからアポストロフィを削除する

時間:「333333333333333333316:06:55 -232323の許可: 'プレビュー' 先生名: '4444444444444ffffffffffff' 学生: 'cccccccccccssssssssss' 試験スコア: 'eeeeeeeeeeeA'

これは私の正規表現式です以下

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

アポストロフィを使用しないように正規表現を再作成します。

私はこの正規表現をoracleクエリーでREGEX_SUBSTRという式で使用する予定であり、アポストロフィを使用した正規表現は非常にうまく使用されていないようです。

どうすればよいですか?

私はregexが多くのフォーマットを持っていることを知っています。誰かがより良いパターンを知っているなら、お気軽にお勧めします。 the alternative quoting mechanismを使用して、よりきれいに

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

か::

+0

[あなたの質問をフォーマットしてください](https://stackoverflow.com/help/formatting)。 –

+1

FYI:['[a-zA-z]'は単なる文字以外のものにマッチすることに注意してください(https://stackoverflow.com/a/29771926/3832970)。 –

答えて

1

あなたは、単一引用符をエスケープして、現在の正規表現パターンを(!Wiktor第さんのコメントに従って修正)を使用することができます

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

をあなたが去ることができますどの個々の引用符は元のとおりで、実際のコンテンツには表示されない区切り文字を使用して区切られた一重引用符の集合にすべてを入れる - ここでは角括弧を使用しているので、q'[ ... ]'。内部にあるものは、...の部分にエスケープされていないシングルクォーテーションが含まれます。

デモ:

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 

か:

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 

ちょうどあなたが戻って参照してregexp_replace()を使用することができます単語 'プレビュー' を取得するには:

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 

または

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 
関連する問題