regex - 在 perl 中的负前瞻表达式中正确使用插入符号

标签 regex perl

我试图匹配任何不完全由大写或小写字母组成的单词,我写了以下正则表达式:

if ($line =~ /(?!^[A-Z][A-Z]+(\s*)$)(?!^[a-z][a-z]+(\s*)$)/) {
    print $line;
}

下面的表达式应该匹配所有大写字母的单词
(?!^[A-Z][A-Z]+(\s*)$) 

这应该匹配所有小写字母的单词
(?!^[a-z][a-z]+(\s*)$)

我将两者结合起来,并尝试将其与以下单词 ASDSFSDF、asdfasdfasdf 和 asdasdfFFFdsfs 匹配。我注意到它匹配所有内容。仅当我将插入符号移到括号外时,如下所示:
^(?![A-Z][A-Z]+(\s*)$)^(?![a-z][a-z]+(\s*)$)/)

我是否看到它只处理 asdasdfFFFdsfs。有人可以向我解释为什么我需要将运算符移到负前瞻表达式之外吗?我是 regexp 的新手,我很困惑。

谢谢。

最佳答案

只检查字符串的大小写字符怎么样?

(?=.*[A-Z])(?=.*[a-z])

如您所见,这不会匹配仅包含一种情况的字符串,因为两个前瞻都必须匹配。

当然,这只是执行两个正则表达式匹配并组合结果的复杂方法:
if ($line =~ /[A-Z]/ and $line =~ /[a-z]/)

关于regex - 在 perl 中的负前瞻表达式中正确使用插入符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18818084/

相关文章:

javascript - 有没有办法使用 perl dancer 发出跨源请求?

正则表达式 - 零宽度 'word boundary' 使交替模式正确匹配

javascript - 正则表达式不替换字符串中的斜杠

mysql - Autokill 选择 MySQL 查询 perl 脚本

Perl 兼容性

python - 如何使用 pandas 创建新的 df 列以使用正则表达式获取列名称和值?

perl - Perl 中的编译时间和运行时间

regex - 在 RegEx 中强制执行匹配顺序

mysql - Flutter/Dart 只提取日期和时间?

java - 如何将字符串拆分为字符串流?