POSIX 扩展正则表达式 - 不包含 X 但包含 Y (std::regex c++11)
POSIX extended Regex - contain not X but Y (std::regex c++11)
问题解释
我一直在尝试编写一个正则表达式来传递这种格式:
"bob likes poo - whatever(&T(R)*HP#"
" \t \t bob likes poo - *^RFVOG(IBHUO)B"
但失败了:
"//bob likes poo - GV*(GF*("
"# \t bob likes poo - OHG(G(*"
"bob does not like poo G&((HOUIHBO:"
他们是关键位。
The line does NOT start with comment characters(# or //), can have
blank spaces(space or tab), has to have something followed by
delimeter(" - "), followed by whatever.
极端情况是:
1) " \t //this is still a comment - YGV^FV*"
应该还是失败了。
2) " /i_am//_no_/comment - FG&*G*&G"
应该通过。
随机推理
好吧,我失败了。这让我问我们是否可以以某种方式指定包含一些字符而不是其他字符。例如
[^abc]
仅表示不是 a、b 或 c 的任何字符。但是我们怎么说不是 abc 而是 123 呢?我们不能只放
[^abc123]
因为那会把他们排除在外,做不到
[^abc]123
因为这意味着它必须在某个不是 a、b、c 的字符之后有 123,这总共是 4 个字符,而不是我们想要的 1 个。我什至不知道这是否可能。所以从某种意义上说这里有2个问题。
到目前为止我最好的选择是:
"[[:blank:]]*[^[:blank:]]+( - ).*"
这使得格式匹配正确,但不考虑注释。
编辑
我找到了可行的解决方案。它有效,但它很难看:
"[[:blank:]]*([^[:blank:]#]([^/].*)?|[^[:blank:]#/].*)( - ).*"
如果有人知道如何让它更好,请告诉我。
在了解了评论中关于需求的更多信息后,我得出了这个正则表达式:
^[[:blank:]]*(\/([^\/][^-]*|)|([[:blank:]]|^)[^[:blank:]\/#][^-]*) - .*
匹配项:
顺便说一下,我不知道为什么 bob 喜欢 p** !
问题解释
我一直在尝试编写一个正则表达式来传递这种格式:
"bob likes poo - whatever(&T(R)*HP#"
" \t \t bob likes poo - *^RFVOG(IBHUO)B"
但失败了:
"//bob likes poo - GV*(GF*("
"# \t bob likes poo - OHG(G(*"
"bob does not like poo G&((HOUIHBO:"
他们是关键位。
The line does NOT start with comment characters(# or //), can have blank spaces(space or tab), has to have something followed by delimeter(" - "), followed by whatever.
极端情况是:
1) " \t //this is still a comment - YGV^FV*"
应该还是失败了。
2) " /i_am//_no_/comment - FG&*G*&G"
应该通过。
随机推理
好吧,我失败了。这让我问我们是否可以以某种方式指定包含一些字符而不是其他字符。例如
[^abc]
仅表示不是 a、b 或 c 的任何字符。但是我们怎么说不是 abc 而是 123 呢?我们不能只放
[^abc123]
因为那会把他们排除在外,做不到
[^abc]123
因为这意味着它必须在某个不是 a、b、c 的字符之后有 123,这总共是 4 个字符,而不是我们想要的 1 个。我什至不知道这是否可能。所以从某种意义上说这里有2个问题。
到目前为止我最好的选择是:
"[[:blank:]]*[^[:blank:]]+( - ).*"
这使得格式匹配正确,但不考虑注释。
编辑
我找到了可行的解决方案。它有效,但它很难看:
"[[:blank:]]*([^[:blank:]#]([^/].*)?|[^[:blank:]#/].*)( - ).*"
如果有人知道如何让它更好,请告诉我。
在了解了评论中关于需求的更多信息后,我得出了这个正则表达式:
^[[:blank:]]*(\/([^\/][^-]*|)|([[:blank:]]|^)[^[:blank:]\/#][^-]*) - .*
匹配项:
顺便说一下,我不知道为什么 bob 喜欢 p** !