这是我测试地址的正则表达式:
--Main table
CREATE TABLE "WORKORDER"
( "ID" NUMBER(*,0) NOT NULL,
"ParentID" NUMBER(*,0),
"Status" VARCHAR2(128 BYTE)
);
--Constraint pk
ALTER TABLE "WORKORDER" ADD (
CONSTRAINT "WORKORDER_PK" PRIMARY KEY ("ID"));
--Sequence
CREATE SEQUENCE "WORK_SEQ"
START WITH 1000
INCREMENT BY 1
NOCACHE
NOCYCLE;
--Trigger for sequence
CREATE OR REPLACE TRIGGER "WORK_ID_TRIGGER"
BEFORE INSERT
ON "WORKORDER"
FOR EACH ROW
BEGIN
SELECT WORK_SEQ.nextval
INTO :new."ID"
FROM DUAL;
END;
--Another table
CREATE TABLE "ANOTHER"
( "ID" NUMBER(*,0) NOT NULL,
"ParentID" NUMBER(*,0),
"Status" VARCHAR2(128 BYTE)
);
--Thirgger on child record inser populate another table.
CREATE OR REPLACE TRIGGER "AFTER_CHILD_INSERT"
AFTER INSERT
ON "WORKORDER"
FOR EACH ROW
BEGIN
IF (:new."ParentID" IS NOT NULL)
THEN
INSERT INTO ANOTHER VALUES
(:new."ID", :new."ParentID", :new."Status");
END IF;
END;
但当地址包含^((([\u0600-\u06FF])+\s?([0-9()،,-]?)+\s?))+$
或/
字符时,会出现\
。
这里是示例输入:
RegexMatchTimeoutException
答案 0 :(得分:2)
你的正则表达式的问题在于它包含量化可选模式的嵌套量词。
使用线性逻辑:
^[\u0600-\u06FF]+(?:[\s0-9()،,-]+[\u0600-\u06FF]+)*$
请参阅regex demo
<强>详情:
^
- 字符串开头[\u0600-\u06FF]+
- 来自给定Unicode范围的一个或多个符号(?:[\s0-9()،,-]+[\u0600-\u06FF]+)*
- 0+序列:
[\s0-9()،,-]+
- 1+个符号:空格,数字,(
,)
,،
,,
或-
[\u0600-\u06FF]+
- 来自给定Unicode范围的一个或多个符号$
- 字符串结束。