Чтобы ввести одинарную кавычку в строку, удвойте ее.
Ваш шаблон немного избыточен, вы можете избавиться от чередования, используя необязательную группу:
^\p{L}+([\p{L}\p{Pd}\p{Zs}']*\p{L}+)?$
^ ^^
Однако , вы не можете использовать классы свойств Unicode в регулярном выражении Oracle. Что вы можете сделать, это использовать POSIX [:alpha:]
класс символов вместо \p{L}
, чтобы соответствовать любой букве Юникода и прописать \p{Pd}
([\u002D\u058A\u05BE\u1400\u1806\u2010\u2011\u2012\u2013\u2014\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D]
) и \p{Zs}
([\u0020\u3000\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2008\u2009\u200A\u205F\u00A0\u2007\u202F]
) Классы свойств Unicode. Вы также можете рассмотреть возможность использования классов символов POSIX [:space:]
/ [:blank:]
вместо \p{Zs}
, поскольку \p{Zs}
соответствует всем горизонтальным пробелам НО символ табуляции.
Преобразованный шаблон будет выглядит как
'^[[:alpha:]]+([-[:alpha:]' || unistr('\058A') || unistr('\05BE') || unistr('\1400') || unistr('\1806') || unistr('\2010') || unistr('\2011') || unistr('\2012') || unistr('\2013') || unistr('\2014') || unistr('\2015') || unistr('\2E17') || unistr('\2E1A') || unistr('\2E3A') || unistr('\2E3B') || unistr('\2E40') || unistr('\301C') || unistr('\3030') || unistr('\30A0') || unistr('\FE31') || unistr('\FE32') || unistr('\FE58') || unistr('\FE63') || unistr('\FF0D') || unistr('\0009') || unistr('\3000') || unistr('\1680') || unistr('\2000') || unistr('\2001') || unistr('\2002') || unistr('\2003') || unistr('\2004') || unistr('\2005') || unistr('\2006') || unistr('\2008') || unistr('\2009') || unistr('\200A') || unistr('\205F') || unistr('\00A0') || unistr('\2007') || unistr('\202F') || ' '']*[[:alpha:]]+)?$'
Или, если вы используете [:blank:]
:
'^[[:alpha:]]+([-[:alpha:][:blank:]' || unistr('\058A') || unistr('\05BE') || unistr('\1400') || unistr('\1806') || unistr('\2010') || unistr('\2011') || unistr('\2012') || unistr('\2013') || unistr('\2014') || unistr('\2015') || unistr('\2E17') || unistr('\2E1A') || unistr('\2E3A') || unistr('\2E3B') || unistr('\2E40') || unistr('\301C') || unistr('\3030') || unistr('\30A0') || unistr('\FE31') || unistr('\FE32') || unistr('\FE58') || unistr('\FE63') || unistr('\FF0D') || ' '']*[[:alpha:]]+)?$'
См. демонстрационный пример regex (1
означает, что было совпадение).