正则表达式接受地址中的波斯字符

时间:2017-01-03 10:24:28

标签: c# regex persian

这是我测试地址的正则表达式:

--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

1 个答案:

答案 0 :(得分:2)

你的正则表达式的问题在于它包含量化可选模式的嵌套量词。

使用线性逻辑:

^[\u0600-\u06FF]+(?:[\s0-9()،,-]+[\u0600-\u06FF]+)*$

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • [\u0600-\u06FF]+ - 来自给定Unicode范围的一个或多个符号
  • (?:[\s0-9()،,-]+[\u0600-\u06FF]+)* - 0+序列:
    • [\s0-9()،,-]+ - 1+个符号:空格,数字,()،,-
    • [\u0600-\u06FF]+ - 来自给定Unicode范围的一个或多个符号
  • $ - 字符串结束。