REGEXP 模式匹配

REGEXP Pattern matching

我想进行 regexpr 模式匹配,但我做不到。请帮忙。

我想评估将要插入到数据库中的值。我想执行如下检查。

只允许使用四个特殊字符和字母。不允许使用其他特殊字符。

四个字符是.点,-连字符'撇号和</code>space</p> <p>我的价值将满足以下条件。</p> <ul> <li>它只包含字母。</li> <li>它包含字母和以上特殊字符的组合。</li> <li>它只包含所有 space。</li> <li>除了 spaces 不应该是简单的特殊字符如 <code>......, ----------, ''''''''.

例如这些是有效的:

这些都是无效的:

使用正则表达式 ^( +|[A-Z '.-]*[A-Z][A-Z '.-]*)$ 来匹配仅包含以下之一的字符串:

  •  +
    所有 space 个字符;或
  • [A-Z '.-]*[A-Z][A-Z '.-]*
    零个或多个字母字符或特殊字符,然后是一个字母字符,然后是零个或多个字母字符或特殊字符。

像这样:

Oracle 设置:

CREATE TABLE data (
  value VARCHAR2(100),
  CONSTRAINT value__alpha_or_special_chr CHECK ( REGEXP_LIKE( value, '^( +|[A-Z ''.-]*[A-Z][A-Z ''.-]*)$' ) )
);

插入有效数据:

INSERT INTO data ( value )
SELECT q'!ORACLE!'       FROM DUAL UNION ALL
SELECT q'!ORA..C  L--E!' FROM DUAL UNION ALL
SELECT q'!'''..O!'       FROM DUAL UNION ALL
SELECT q'!O--...''''!'   FROM DUAL UNION ALL
SELECT q'!     !'        FROM DUAL

无效数据失败:

INSERT INTO data ( value )
SELECT q'!''''''''''!' FROM DUAL;
ORA-02290: check constraint (FIDDLE_TRJCYMMSYLSIPALCEYXD.VALUE__ALPHA_OR_SPECIAL_CHR) violated
INSERT INTO data ( value )
SELECT q'!--------!'   FROM DUAL;
ORA-02290: check constraint (FIDDLE_TRJCYMMSYLSIPALCEYXD.VALUE__ALPHA_OR_SPECIAL_CHR) violated
INSERT INTO data ( value )
SELECT q'!ORACLE$!'    FROM DUAL;
ORA-02290: check constraint (FIDDLE_TRJCYMMSYLSIPALCEYXD.VALUE__ALPHA_OR_SPECIAL_CHR) violated
INSERT INTO data ( value )
SELECT q'!ORACL#E!'    FROM DUAL;
ORA-02290: check constraint (FIDDLE_TRJCYMMSYLSIPALCEYXD.VALUE__ALPHA_OR_SPECIAL_CHR) violated

查询:

SELECT * FROM data;

输出:

| VALUE        |
| :----------- |
| ORACLE       |
| ORA..C  L--E |
| '''..O       |
| O--...''''   |
|              |

db<>fiddle here