您可以通过转义单引号使用当前的正则表达式(更正为每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
请[格式化您的问题](https://stackoverflow.com/help/formatting)。 –
仅供参考:请注意['[a-zA-z]'不仅仅匹配字母](https://stackoverflow.com/a/29771926/3832970)。 –