我正在尝试构建一个正则表达式,以匹配基于The Company Regulations 2015 - Permitted characters的英国有效公司命名标准。我尝试匹配的模式:
1.允许的单词字符和符号可用于名称的任何部分:A-Z a-z 0-9 ? ! & @ \ / £ $ € ¥ . , «» -
1.可以使用每组一种的符号:*" “”
- ' ‘’
- () [] {} <>
1.允许的符号仅在前3个字符之后:* = # % +
1.最多允许160个字符
- 进一步阐述第2部分:
(d)column 1 of table 2 in Schedule 1中所提述的任何其他标点符号,但须采用该表第2栏中与该标点符号相对列出的其中一种格式。
这意味着如果公司名称使用括号()
,则不应使用方括号[]
或花括号{}
。它应仅包含括号。或者如果公司名称使用“”
,则不应使用"
。同样,如果公司名称使用‘’
,则不应使用'
。
Here is my Regex101 with tests适用于PCRE、JS、Py和Go:
/^[A-Za-z0-9 \"“”'‘’()[\]{}<>«»\\\/?!&@£$€¥.,-]{3}[*=#%+A-Za-z0-9 \"“”'‘’()[\]{}<>«»\\\/?!&@£$€¥.,-]{0,157}$/
此正则表达式将无法匹配 * 第2部分:每组规则一种类型 * 测试用例。
我可以解决这个没有正则表达式,但我有兴趣知道,如果它是可能的,在正则表达式只?
1条答案
按热度按时间iklwldmw1#
这个解决方案基于评论中的@Paolo正则表达式。
Regex 101,进一步测试:
说明:
Positive lookaheads用于Assert字符串遵循标准的part(d)(每组可以使用一种类型的符号)。并且在内部,每个子规则由atomic grouping分隔以提高性能。
PCRE
JavaScript和Python
JavaScript和Python不支持原子分组语法,所以在此之前,你必须先解决一个前瞻Assert(lookahead assertion)的问题,来模拟工作得很好的原子组:
希望这对其他人有用。