正则表达式: 找出不含(排除)某个字符串的所有

Match string not containing string

Given a list of strings (words or other characters), only return the strings that do not match.


以正则表达式 ^((?!badword).)*$ 搜索以下内容将会得到除1、4行以外的所有内容。此表达式对于log搜索比较有用。

badword可以替换为一组字符串,如(ECSdk|MOS),表达式^((?!(ECSdk|MOS)).)*$意为排除ECSdk和MOS 所在的行。

badword
test
one two
abadwords

three


参考:

https://www.regextester.com/15


在 PostgreSQL 中,可以使用正则表达式操作符 `~` 或者 `~*` 来匹配包含特定关键字的记录。以下是详细的说明和示例代码。 ### 使用正则表达式匹配包含特定关键字的记录 #### 1. 区分大小写的正则表达式匹配 如果希望区分大小写地匹配包含特定关键字的记录,可以使用 `~` 操作符。例如,假设有一张名为 `documents` 的表,其中有一个字段 `content` 存储文档内容,现在想要查找所有包含单词 `PostgreSQL` 的记录: ```sql SELECT * FROM documents WHERE content ~ '\yPostgreSQL\y'; ``` 这里的 `\y` 是一个边界锚点[^3],表示匹配的是完整的单词而不是部分单词的一部分。因此,这个查询只会返回那些单独包含 `PostgreSQL` 这个词作为独立单词的记录。 #### 2. 不区分大小写的正则表达式匹配 如果不关心字母的大小写,只需要知道某个关键字是否存在,那么应该使用 `~*` 操作符。继续上面的例子,如果我们想忽略大小写来查找包含 `postgresql` 关键字的所有记录,可以这样写: ```sql SELECT * FROM documents WHERE content ~* '\ypostgresql\y'; ``` 这条语句将会找到任何地方出现过不分大小写的 "postgresql" 字样的行项。 #### 3. 否定条件下的正则表达式匹配 当需要找出不符合某些模式的数据时,可分别通过 `!~` 和 `!~*` 实现敏感与不敏感两种类型的排除筛选逻辑。比如要选出不含数字串0到9之间的任意数位组成的字符串所在的列值集合的话,就可以这么办: ```sql SELECT * FROM documents WHERE content !~ '[0-9]'; ``` 这意味着它会选择所有没有纯数值型子串存在的那部分内容对应的整条纪录出来展示给我们看[^3]。 --- ### 示例场景扩展:分割字符串为数组形式 除了简单的匹配之外,有时候还需要进一步处理符合条件的结果集。比如说按照逗号或者其他特殊符号拆分开来的多个项目列表,并逐一分析它们是否满足其他业务需求等情况。这时就可能需要用到像 `regexp_split_to_array()` 函数这样的高级特性了。举个例子来说吧,假如我们的数据库里存着一堆标签信息,每个用户的兴趣爱好都用半角冒号隔开连接成了一整个长长的文字链;此时要是想知道哪些人的喜好里面提到了运动类别的活动呢? ```sql WITH split_tags AS ( SELECT id, regexp_split_to_array(interests, ':') as tag_list FROM profiles ) SELECT p.* FROM profiles p JOIN split_tags st ON p.id = st.id WHERE array_position(st.tag_list, 'sports') IS NOT NULL; ``` 这里先定义了一个临时视图 `split_tags` 将原始的兴趣字段按':'切割成了一个个离散的小单元保存在一个数组变量当中去看待;然后再基于这个新的结构重新关联回原表做最终过滤输出工作流程[^4]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值