我对正则表达式有点新意,写了一个简单的正则表达式来检索单词" Preview"来自下面的字符串。
时间:' 333333333333333333316:06:55 -232323'许可:'预览'教师姓名:' 4444444444444ffffffffffff'学生:' cccccccccccssssssssss'考试成绩:' eeeeeeeeeeeA'
这是我在下面的正则表达式
Permission:\s?'([a-zA-z]+)'\s?Teacher name
我想重新创建我的正则表达式,不要在其中包含撇号。
我打算在oracle查询中的REGEX_SUBSTR
表达式中使用这个正则表达式,似乎不能很好地使用我的正则表达式撇号。
我该怎么做?
我知道正则表达式有很多格式,所以如果有人知道更好的模式,请随时提出建议。
答案 0 :(得分:1)
您可以通过转义单引号来使用您当前的正则表达式模式(根据Wiktor的评论进行更正!):
regexp_substr(<your string>, 'Permission:\s?''([a-zA-Z]+)''\s?Teacher name')
或更清楚地使用the alternative quoting mechanism:
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