问题说明
我一直在尝试编写一个正则表达式来传递这种格式:
"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:"
他们是关键位。
该行不以注释字符(# 或 //)开头,可以有空格(空格或制表符),必须有一些东西,后跟分隔符(“ - ”),然后是任何东西。
极端情况是:
1) " \t //this is still a comment - YGV^FV*"
应该仍然失败。
2) " /i_am//_no_/comment - FG&*G*&G"
应该通过。
随机推理
好吧,我失败了。这让我问我们是否可以指定以某种方式包含某些字符但不能包含其他字符。例如
[^abc]
just 表示任何不是 a、b 或 c 的字符。但是我们怎么说不是 abc 而是 123 呢?我们不能只是把
[^abc123]
因为那会排除他们,不能做
[^abc]123
因为这意味着它必须在某个不是 a、b、c 的字符之后有 123 个字符,总共 4 个字符而不是我们想要的 1 个字符。我不知道这是否可能。所以从某种意义上说,这里有两个问题。
到目前为止,我最好的选择是:
"[[:blank:]]*[^[:blank:]]+( - ).*"
这使得格式匹配正确但不考虑评论。
编辑
我找到了可行的解决方案。它有效,但它很丑陋:
"[[:blank:]]*([^[:blank:]#]([^/].*)?|[^[:blank:]#/].*)( - ).*"
如果有人知道如何使它更好,请告诉我。