Development的环境是C上的regex.h。它是POSIX regex。 我放了一个REG_EXTENDED选项。 (http://man7.org/linux/man-pages/man3/regcomp.3.html)
这是PostgreSQL的一些语法。 []部分可以忽略或使用单词。 ()部分必须使用一个词。 '|'表示OR。
SET [SESSION|LOCAL] SEARCH_PATH (TO|=) (SCHEMA|'SCHEMA'|"SCHEMA");
例如,这种语法可以是这样的。
#1: SET SEARCH_PATH TO SCHEMA;
#2: SET SESSION SEARCH_PATH = "SCHEMA";
我想解析架构的名称。但是我无法制作正确的正则表达式。
当忽略忽略的部分时,我制作了此正则表达式。不要考虑案件。我已经设置了忽略大小写选项。
^\\s*set\\s+search_path\\s+(to|=)\\s+['\"]?([a-z0-9_$$]?+)['\"]?
但是,如果我放置会话或本地,则它不起作用。所以我修复了这个正则表达式。但是我不能确保匹配正确的句子。这就是我尝试过的。
^\\s*set\\s+(session\\s+|local\\s+)?search_path\\s+(to|=)\\s+['\"]?([a-z0-9_$$]?+)['\"]?
所以我希望使regex可以匹配正确的语法。
编辑:
我对此进行了测试,并且可以很好地工作。您可以在此网页上看到我尝试过的内容。 https://regex101.com/r/5zclS7/3
但是在C上,它不起作用。