二合一正则表达式



我正在尝试将查询中两种情况的正则表达式组合到ClickHouse数据库:

  1. 直至symbol"@"=>(^[^@]+)
  2. 没有域'company\'和'company.com\'=>(?:company.com\\\\+|company\\\\+)(.*)

我发现使用"regex online"有两种方法:

  1. ^company\\(.*)|^(.*)@|^(?!company\\.*).*$
  2. (?<=company\\)(.*)|(.*)(?<=@)|^(?!company\\.*).*

但是,不支持构造?!?<=(错误:无效的perl运算符(。我使用了命令extract,例如extract(User, '(?<=company\\)(.*)|(.*)(?<=@)|^(?!company\\.*).*')

你能给我一些建议来理解如何使这个正则表达式适合我吗。

括号内-应通过,不应通过:

  1. 公司\[ABC-1D2E]
  2. [ABC-DE]@company.com
  3. [123-ABCDE]
  4. [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     │
└────────────────────┴──────────────────────┴───────────┘
*/

最新更新