我的文字文件看起来像
logSet1 = [
{ log1 = event1,
log2 = event2
}
]
logSet2 = [
log1,
log2
]
我想写一个只匹配logSet2而不是logSet1的正则表达式。我试过了
\= \[[ ]*\n([^\{].*\n)*?[ ]*\]\
但它与两者都匹配..我认为[^\{]
会强制它与不以\{
开头的字符串匹配。
答案 0 :(得分:2)
如果您的文件是以编程方式构建的,请考虑将其加载到数据结构中并导航它们。
对于正则表达式本身,您可能希望使用该语言的某些功能。
"[ ]*" -- any number of spaces is not great for what you're angling for. Tabs and non breaking white spaces will through you for a loop, as will system differences (\n vs \r vs \r\n). Try just \s*
\ w也是你的朋友(单词字符,a-zA-Z0-9和一些标点符号)
在那种情况下,我建议:
\w[\w\s]*= \[\s*[\w,\s]*\]
单词字符,后跟多个单词或空格,后跟=,空格和开括号。 " \ w [\ w \ s] * = ["得到你" logSet2 = ["。然后是许多空格字符,后跟单词字符,逗号和空格,最后用括号括起来。带有大括号的logSet1和=永远不会匹配。
缺点是数据,这里表示为" log1"和" log2"有了这些特征,整个正则表达法就会崩溃。