問題的解釋POSIX擴展正則表達式 - 包含不X,但Y(STD ::正則表達式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:"
他們鍵位之中。
行不帶註釋字符(#或//)開始,可以有 空格(空格或製表符),必須有東西,然後 分隔符(「 - 」),其次是什麼。
角情況是:
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
,因爲這將意味着它有一些字符不是一個,B,C後,有123這是總共4個字符,而不是我們想要的1個字符。我不知道這是否可能。所以在某種意義上這裏有兩個quatsions。
我最好的選擇,到目前爲止是:
"[[:blank:]]*[^[:blank:]]+(-).*"
這使得匹配正確的格式,但不佔的意見。
編輯
我已經找到了有效的解決方案。它的作品,但它是醜陋的地獄:
"[[:blank:]]*([^[:blank:]#]([^/].*)?|[^[:blank:]#/].*)(-).*"
如果有人知道如何使它更好,請告訴我。
^[[:blank:]]*(\/([^\/][^-]*|)|([[:blank:]]|^)[^[:blank:]\/#][^-]*) - .*
匹配:
嗯,「不是abc但是必須是123」與「必須是123」或者是「[123]」一樣正則表達式......或者我誤解了你的部分問題? – hyde
這是你想要的['^ [^ \ /# - ] *(?:\/[^ \ /] [^ - ] *)? - 。*'](https://regex101.com/r/ yW9xZ9/1)? – revo
如果將非捕獲組「(?:...)」更改爲捕獲組「(...)」,會怎麼樣? – revo