我正在尝试使用以下字符串...
v VARCHAR2(100) := '<LABEL> FOR ABC';
把它变成......
'LABEL FOR ABC'
这似乎很容易,但我无法在一个正则表达式语句中完成此操作。 &lt; ...&gt; block将始终启动字符串。
例如,我最好的尝试......
v := REGEXP_SUBSTR(v, '[^\<][A-Z]+[^\>][A-Z ]+')
收益'标签'。
通过执行以下操作,我确实设法让这个工作......
v := REGEXP_REPLACE(v, '^\<');
v := REGEXP_REPLACE(v, '\>', 1, 1);
但我想知道是否可以在单个正则表达式语句中完成。
由于
编辑:我忘了提,我只想删除前导&lt; ...&gt;。如果字符串类似于
<LABEL> FOR ABC <LEAVE ME>
我希望它是......
LABEL FOR ABC <LEAVE ME>
答案 0 :(得分:2)
您可以使用REGEXP_REPLACE('<LABEL> FOR ABC <LEAVE ME>','^<(.*?)>','\1')
。
模式:
^< --matches '<' at the beginning of the string.
.*? --non greedy quantifier to match 0 or more characters within '<' and '>'.
--This is enclosed in brackets to form first capture group.
--This is then used in replace_string as \1.
> --Matches the first '>' after the first '<'.
示例:
SELECT '<LABEL> FOR ABC <LEAVE ME>' str,
REGEXP_REPLACE ('<LABEL> FOR ABC <LEAVE ME>', '^<(.*?)>', '\1') replaced_str
FROM DUAL;
str replaced_str
----------------------------------------------------
<LABEL> FOR ABC <LEAVE ME> LABEL FOR ABC <LEAVE ME>
答案 1 :(得分:1)
您只想用空字符串替换<
和>
的所有实例?然后这个:
SELECT
REGEXP_REPLACE('<LABEL> blah', '[<>]', '') FROM DUAL