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标记字符串.我相信我需要使用负面的后卫,但我不知道如何使用多个角色.
你已经回答了大部分问题:
您正在使用否定集[^ \\&<>|\t\n]来指定哪些字符可能不存在,因此您所要做的就是使用相同的集合而不使用前面带有的否定\来转义字符.这样你\\[ \\&<>|\t\n]就可以把它看成是" \随后的集合中的任何一个项目"现在将两者结合起来就可以了([^ \\&<>|\t\n]|\\[ \\&<>|\t\n])+.
要打破它:
一个或多个:[^ \\&<>|\t\n]或\\[ \\&<>|\t\n]