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

标签 c++ regex string flex-lexer regex-negation

现在我正在使用 [^ \\&<>|\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/

相关文章:

c++ - VOID 是指 'nothing' 还是 'anything'

c++ - vector<T>.erase() 与 g++ 的问题

java - 将字符串(代表十六进制)转换为字节数组的有效方法?安卓

C 文件处理查询

c++ - 如何修复无限 while 循环?

c# - 想在 asp.net 中使用 c++ 库和 dll

javascript - 如何从新的 YouTube 网址解析视频 ID

regex - 应用具有条件环视的正则表达式

c# - 如何修改这个有效的正则表达式以在 C# 中使用?

delphi - Delphi字符串中的字符如何转义