regex - 如何从 Postgres 中的模式搜索中忽略特定的单词或字符集
问题描述
我在 Postgres 11 中有下表。
col1
BI Placebo
BI 10773 Placebo
AMG 386 Placebo
Eflornithine or Placebo
Sulindac;Placebo
Sulindac plus Placebo
Vehicle Controlled Placebo
我想获取那些忽略了特定单词和特殊字符集并且字符串在模式前后有 1 个或多个的行。所需的输出是:
col1
BI Placebo
BI 10773 Placebo
AMG 386 Placebo
Vehicle Controlled Placebo
我尝试了以下查询来执行此操作:
select * from table where col1 ~* '^(?!or|;|+|plus)\w\s\w\sPlacebo$' or col1 ~* '^(?!or|;|+|plus)\w\sPlacebo$'
如果这不是一个复杂的查询,我很抱歉,但目前我无法逃避这些单词和字符。
解决方案
如果只允许匹配单词字符,则可以省略匹配;
和+
从交替中。请注意,您必须转义加号\+
或将两者都添加到字符类[;+]
您可以检查字符串不包含or和plus使用负前瞻(?!.*(?:or|plus))
然后匹配 1+ 单词字符使用\w+
后跟可选匹配空格和 1+ 单词字符。
然后匹配Placebo
字符串的末尾。
^(?!.*(?:or|plus))\w+(?: \w+)? Placebo$
例如
select * from table where col1 ~* '^(?!.*(?:or|plus))\w+(?: \w+)? Placebo$'
输出
col1
BI Placebo
BI 10773 Placebo
AMG 386 Placebo
Vehicle Controlled Placebo
推荐阅读
- java - 如何在 Google Places API 请求中添加延迟?
- android - Kotlin - 一个按钮可以应用 2 个动作吗?
- android - Load already fetched image when offline in Glide for Android
- firebase - 在 Firebase Firestore 中构建 Cloud Storage 的文件树
- javascript - 如何从 Web 服务器自动化 Web?
- jquery - Typescript TypeError: draggable is not a function
- ios - Swift:在循环内更新标签
- javascript - 使用 Puppeteer、Mocha 和 Chai 在 html 标签属性中断言文本的存在
- java - 登录后 JSessionId 发生变化,Angular 5 正在发送带有请求的新 JSessionID 并丢弃旧的 jsessionid
- javascript - 如何从另一个函数返回“addEventListener()” - Javascript