2017-08-18 94 views
0

我对正则表达式有点新,并且写了一个简单的正则表达式来从下面的字符串中检索单词“Preview”。从regrex模式中删除撇号

时间: '333333333333333333316:06:55 -232323' 权限: '预览' 老师的名字: '4444444444444ffffffffffff' 学生: 'cccccccccccssssssssss' 考试分数: 'eeeeeeeeeeeA'

这是我的正则表达式表达低于

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

我想重新创建我的正则表达式不在其中有撇号。

我打算在oracle查询中使用REGEX_SUBSTR表达式中的这个正则表达式,并且它好像不会用撇号消耗我的正则表达式。

我该怎么做?

我知道正则表达式有很多格式,所以如果有人知道更好的模式,请随时提出建议。

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

或更清洁的使用the alternative quoting mechanism

+0

请[格式化您的问题](https://stackoverflow.com/help/formatting)。 –

+1

仅供参考:请注意['[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