regex - 如何使用正则表达式查找不属于某种模式的东西

标签 regex perl

使用 Perl 风格的正则表达式,是否可以寻找不属于某种模式的东西?

例如,[^abc]寻找单个字符而不是 a也不是 b也不是 c .

但是我可以指定比单个字符更长的内容吗?
例如,在下面的字符串中,我想搜索第一个不是顶级域名且不包含大写字母的单词,或者可能是一些更复杂的规则,例如 3-10 个字符。在我的例子中,这应该是 "abcd" :

net com org edu ABCE abcdefghijklmnoparacbasd abcd

最佳答案

您可以使用否定前瞻断言来做到这一点:

^(?!(?:net|com|org|edu)$)(?!.*[A-Z])[a-z]{3,10}$

See it

解释:
^                   - Start anchor
$                   - End anchor
(?:net|com|org|edu) - Alternation, matches net or com or org or edu
(?!regex)           - Negative lookahead. 
                      Matches only if the string does not match the regex.

所以部分(?!(?:net|com|org|edu)$)确保输入不是顶级域之一。

零件(?!.*[A-Z])确保输入没有大写字母。

零件[a-z]{3,10}$确保输入的长度至少为 3,最多为 10。

关于regex - 如何使用正则表达式查找不属于某种模式的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4386856/

相关文章:

perl - perl 命令中是否有检查未定义函数的选项?

regex - Coldfusion RegEx 检查密码强度

c# - 正则表达式 ",\\s(.*?),\\s"

perl - 在Perl中使用-s获取文件大小

perl - 使用 Test::More 在 perl 中进行单元和集成测试 - 如何捕获退出调用?

perl - AnyEvent->计时器不能与 AnyEvent::Handle 一起使用?

javascript - "hotkey string"的正则表达式

regex - 如何从用户输入的句子中检测谁、什么、何时、何地

python - 如何正则表达式匹配?

perl - 如何在 Perl 中将 ISO8601 时间戳转换为 unix 时间?