我没有能够找到一个适当的正则表达式匹配任何字符串不以某种条件结束。例如,我不想匹配任何以a结尾的内容。
这个比赛
b
ab
1
这个不匹配
a
ba
我知道正则表达式应该以$结束,尽管我不知道它前面应该是什么。
编辑:对于我的案例来说,最初的问题似乎不是一个合理的例子。那么,如何处理多个字符呢?有什么不是ab结尾的吗?
我已经能够修复这个,使用这个线程:
.*(?:(?!ab).).$
尽管这样做的缺点是,它不匹配一个字符的字符串。
我没有能够找到一个适当的正则表达式匹配任何字符串不以某种条件结束。例如,我不想匹配任何以a结尾的内容。
这个比赛
b
ab
1
这个不匹配
a
ba
我知道正则表达式应该以$结束,尽管我不知道它前面应该是什么。
编辑:对于我的案例来说,最初的问题似乎不是一个合理的例子。那么,如何处理多个字符呢?有什么不是ab结尾的吗?
我已经能够修复这个,使用这个线程:
.*(?:(?!ab).).$
尽管这样做的缺点是,它不匹配一个字符的字符串。
当前回答
任何匹配以——*a$结尾的东西所以当你匹配正则表达式时,对条件求反 或者你也可以用。*[^a]$,其中[^a]表示任何不是a的东西
其他回答
你不给我们语言,但如果你的regex风味支持查看断言,这是你需要的:
.*(?<!a)$
(?<!a)是一个反向回溯断言,它确保在字符串(或有m修饰符的行)结束之前,没有字符"a"。
在Regexr上可以看到
你也可以很容易地扩展它与其他字符,因为这检查字符串,并不是一个字符类。
.*(?<!ab)$
这能匹配任何不以"ab"结尾的东西,在Regexr上可以看到
试试这个
/.*[^a]$/
[]表示字符类,^颠倒字符类以匹配除a以外的所有字符。
任何匹配以——*a$结尾的东西所以当你匹配正则表达式时,对条件求反 或者你也可以用。*[^a]$,其中[^a]表示任何不是a的东西
.*[^a]$
上面的正则表达式将匹配不以a结尾的字符串。
这个问题很老了,但我找不到更好的解决方案,我把我的贴在这里。找到所有的USB驱动器,但不列出分区,从而从结果中删除“部分[0-9]”。我最终做了两个grep,最后一个对结果求反:
ls -1 /dev/disk/by-path/* | grep -P "\-usb\-" | grep -vE "part[0-9]*$"
这在我的系统上的结果是:
pci-0000:00:0b.0-usb-0:1:1.0-scsi-0:0:0:0
如果我只想要分区,我可以这样做:
ls -1 /dev/disk/by-path/* | grep -P "\-usb\-" | grep -E "part[0-9]*$"
我得到:
pci-0000:00:0b.0-usb-0:1:1.0-scsi-0:0:0:0-part1
pci-0000:00:0b.0-usb-0:1:1.0-scsi-0:0:0:0-part2
当我这样做的时候:
readlink -f /dev/disk/by-path/pci-0000:00:0b.0-usb-0:1:1.0-scsi-0:0:0:0
我得到:
/dev/sdb