我没有能够找到一个适当的正则表达式匹配任何字符串不以某种条件结束。例如,我不想匹配任何以a结尾的内容。
这个比赛
b
ab
1
这个不匹配
a
ba
我知道正则表达式应该以$结束,尽管我不知道它前面应该是什么。
编辑:对于我的案例来说,最初的问题似乎不是一个合理的例子。那么,如何处理多个字符呢?有什么不是ab结尾的吗?
我已经能够修复这个,使用这个线程:
.*(?:(?!ab).).$
尽管这样做的缺点是,它不匹配一个字符的字符串。
我没有能够找到一个适当的正则表达式匹配任何字符串不以某种条件结束。例如,我不想匹配任何以a结尾的内容。
这个比赛
b
ab
1
这个不匹配
a
ba
我知道正则表达式应该以$结束,尽管我不知道它前面应该是什么。
编辑:对于我的案例来说,最初的问题似乎不是一个合理的例子。那么,如何处理多个字符呢?有什么不是ab结尾的吗?
我已经能够修复这个,使用这个线程:
.*(?:(?!ab).).$
尽管这样做的缺点是,它不匹配一个字符的字符串。
当前回答
试试这个
/.*[^a]$/
[]表示字符类,^颠倒字符类以匹配除a以外的所有字符。
其他回答
如果您使用的是grep或sed,语法将略有不同。注意顺序[^a][^b]方法在这里不起作用:
balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n'
jd8a
8$fb
q(c
balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^a]$"
8$fb
q(c
balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^b]$"
jd8a
q(c
balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^c]$"
jd8a
8$fb
balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^a][^b]$"
jd8a
q(c
balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^a][^c]$"
jd8a
8$fb
balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^a^b]$"
q(c
balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^a^c]$"
8$fb
balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^b^c]$"
jd8a
balter@spectre3:~$ printf 'jd8a\n8$fb\nq(c\n' | grep ".*[^b^c^a]$"
总之,我在Regex101中发现了同样的结果,我认为它是JavaScript语法。
缺点:https://regex101.com/r/MJGAmX/2 好:https://regex101.com/r/LzrIBu/2
试试这个
/.*[^a]$/
[]表示字符类,^颠倒字符类以匹配除a以外的所有字符。
任何匹配以——*a$结尾的东西所以当你匹配正则表达式时,对条件求反 或者你也可以用。*[^a]$,其中[^a]表示任何不是a的东西
.*[^a]$
上面的正则表达式将匹配不以a结尾的字符串。
如果可以使用查找的话,接受的答案是好的。然而,还有另一种方法来解决这个问题。
如果我们看看这个问题被广泛提出的正则表达式:
, * [^] $
我们会发现它几乎是可行的。它不接受空字符串,这可能有点不方便。然而,当只处理一个角色时,这只是一个小问题。然而,如果我们想要排除整个字符串,例如。“abc”,那么:
* [a] [^ b ^] [^ c美元
不会做。例如,它不接受ac。
不过,这个问题有一个简单的解决方案。我们可以简单地说:
{2}, |美元。* [a] [^ b ^] [^ c美元
或者更一般化的说法:
, {n} |美元。* [^ firstchar] [^ secondchar]美元 其中n是你想要禁止的字符串长度(对于ABC是3),而firstchar, secondchar,…是第一,第二……字符串的第n个字符(对于ABC,它将是a,然后b,然后c)。
这源于一个简单的观察,即根据定义,比我们不会禁止的文本短的字符串不能包含此文本。所以我们可以接受任何更短的(“ab”不是“abc”),或者任何足够长到我们可以接受但没有结尾的东西。
下面是一个find的例子,它会删除所有不是。jpg的文件:
找到。正则表达式”。{3}$ | *(^。p] [^] [^] [^ g]美元”删除