Oracle迭代文本并找出哪个单词与几个正则表达式匹配

时间:2017-01-09 17:17:05

标签: regex oracle

我正面临以下问题。 由于缺乏环视,需要将正则表达式拆分为多个部分。 所以我想匹配和至少7个字符长的单词,包括大写字母,_和数字。

A _ AAAABBC

这将匹配两者     MYVAR:=' AAAA_BB8'和myvar:=' A'。我希望它只匹配第二个(具有所有3个条件),因为第一个匹配3个不同的字符串:_ AAAABBCmy $tz = DateTime::TimeZone->new(name => 'America/San_Francisco'); 。另外,我需要匹配的精确词。

2 个答案:

答案 0 :(得分:0)

您想要完全匹配第三个模式。所以你想使用^[A-Z0-9_]{7,}$代替

set serveroutput on
declare
pat1 constant varchar2(20) := '[A-Z]';
pat2 constant varchar2(20) := '[_]';
pat3 constant varchar2(20) := '^[A-Z0-9_]{7,}$';
myvar varchar2(1000);
begin
 myvar := 'A _ AAAABBC';
 IF regexp_like(myvar,pat1)
  AND regexp_like(myvar,pat2)
  AND regexp_like(myvar,pat3) THEN
    DBMS_OUTPUT.PUT_LINE(myvar);  -- Doesn't match
 END IF;

 myvar := 'AAAA_BB8';
 IF regexp_like(myvar,pat1)
  AND regexp_like(myvar,pat2)
  AND regexp_like(myvar,pat3) THEN
    DBMS_OUTPUT.PUT_LINE(myvar);  -- Matches
 END IF;
END;

答案 1 :(得分:0)

希望这有帮助

declare
myvar varchar2(100) :='AAAA_A8';
begin
if regexp_like(myvar,'[A-Z]_[A-Z][0-9]') 
then
    dbms_output.put_line('MATCH'||myvar); end if;
END;

代码有助于识别字母,如字母后跟_然后是字母后跟数字。希望它符合您的要求。代码匹配AAAA_A8和AAAA_8。