现在我正在使用 [^ \\&<>|\t\n]+
它将匹配任何包含非空格、\、&、<、>、|、\t、\n 字符的字符串。我还想做的是允许您转义这些特殊字符中的任何一个,这样(例如)\< 或\& 仍然可以匹配我的整个字符串。
应该匹配:
abcdefghijk
abcdef\&hdehud\<jdow\\
不应匹配:
abcdefhfh&kdjeid
abcdjedje\idwjdj
我找到了这个模式 ([^\[]|(?<=\\)\[)+
它只对“[”字符做同样的事情。我无法弄清楚如何将其扩展以应用于任何其他字符。
知道如何为以反斜杠开头的字符设置异常(exception)吗?
如果它有任何不同,我在 Flex 和 C++ 中使用它来标记 shell 的字符串。我相信我需要使用负面回顾,但我不知道如何使用多个字符来做到这一点。
最佳答案
您已经找到答案的大部分内容了:
您正在使用否定集 [^ \\&<>|\t\n]
指定哪些字符可能不存在,因此您所要做的就是使用相同的集合,而不用 \
开头的否定逃避角色。这让你得到这个 \\[ \\&<>|\t\n]
可以理解为“一个 \
后跟集合中的任何一项” 现在将两者结合起来,你会得到 ([^ \\&<>|\t\n]|\\[ \\&<>|\t\n])+
.
分解:
一个或多个:[^ \\&<>|\t\n]
或 \\[ \\&<>|\t\n]
关于c++ - 如何使用正则表达式匹配不包含特殊字符(&、\、<、>、|、)的字符串,除非它们以反斜杠开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42824665/