如何使用正则表达式来匹配不包含特殊字符(&,\,<,>,|,)的字符串,除非它们以反斜杠进行

Ana*_*eja 3 c++ regex string regex-negation flex-lexer

现在我正在使用[^ \\&<>|\t\n]+哪个匹配任何包含非空格字符的字符串,\,&,<,>,|,\ t,\n.我想要做的是允许你转义任何这些特殊字符,以便(例如)\ <或\&仍然允许我的整个字符串匹配.

应该匹配:

abcdefghijk abcdef\&hdehud\<jdow\\

不应该匹配:

abcdefhfh&kdjeid abcdjedje\idwjdj

我发现这个模式([^\[]|(?<=\\)\[)+只为"["字符做同样的事情.我无法弄清楚如何扩展它以适用于任何其他角色.

知道如何为反斜杠前面的字符设置例外吗?

如果它有所不同,我在Flex和C++中使用它来为shell标记字符串.我相信我需要使用负面的后卫,但我不知道如何使用多个角色.

Ale*_*cki 6

你已经回答了大部分问题:

您正在使用否定集[^ \\&<>|\t\n]来指定哪些字符可能不存在,因此您所要做的就是使用相同的集合而不使用前面带有的否定\来转义字符.这样你\\[ \\&<>|\t\n]就可以把它看成是" \随后的集合中的任何一个项目"现在将两者结合起来就可以了([^ \\&<>|\t\n]|\\[ \\&<>|\t\n])+.

要打破它:

一个或多个:[^ \\&<>|\t\n]\\[ \\&<>|\t\n]