我正在尝试将查询中两种情况的正则表达式组合到ClickHouse数据库:
- 直至symbol"@"=>
(^[^@]+)
- 没有域'company\'和'company.com\'=>
(?:company.com\\\\+|company\\\\+)(.*)
我发现使用"regex online"有两种方法:
^company\\(.*)|^(.*)@|^(?!company\\.*).*$
(?<=company\\)(.*)|(.*)(?<=@)|^(?!company\\.*).*
但是,不支持构造?!
和?<=
(错误:无效的perl运算符(。我使用了命令extract
,例如extract(User, '(?<=company\\)(.*)|(.*)(?<=@)|^(?!company\\.*).*')
你能给我一些建议来理解如何使这个正则表达式适合我吗。
括号内-应通过,不应通过:
- 公司\[ABC-1D2E]
- [ABC-DE]@company.com
- [123-ABCDE]
- [12345]
看起来需要使用replaceRegexpOne:的几个串行调用
SELECT str,
replaceRegexpOne(str, '(.*company\\)(.*)', '\2') preliminary_result_1,
replaceRegexpOne(preliminary_result_1, '(.*)(@company.com)', '\1') result
FROM (
/* test data */
SELECT arrayJoin([
'company\ABC-1D2E',
'ABC-DE@company.com',
'123-ABCDE',
'12345'
]) str
)
/* result:
┌─str────────────────┬─preliminary_result_1─┬─result────┐
│ companyABC-1D2E │ ABC-1D2E │ ABC-1D2E │
│ ABC-DE@company.com │ ABC-DE@company.com │ ABC-DE │
│ 123-ABCDE │ 123-ABCDE │ 123-ABCDE │
│ 12345 │ 12345 │ 12345 │
└────────────────────┴──────────────────────┴───────────┘
*/