我有一个正则表达式,用于解析驱动程序inf文件中的行,只提取变量名称和值,忽略以分号开头的空格和行尾注释。
看起来像这样:
"^([^=\s]+)[ ]*=[ ]*([^;\r\n]+)(?<! )"
大多数情况下,根据此处的示例,它的工作正常:regex example 1
但是,当遇到变量名和等号之间任意位置的制表符时,表达式会失败,如下例所示:regex example 2
我尝试用“\ t”和“\ x09”替换“\ s”,但它仍然无效。我已经使用十六进制编辑器编辑了包含制表符的文本文件,并确认它确实是ASCII“09”。我不想使用正面的字符匹配,因为变量实际上可能包含相当多的特殊字符。
文字“=”的出现似乎引起了问题,但我无法理解为什么。 例如,如果我将表达式剥离为:regex example 3
并使用带有制表符的行,它工作正常。但是,只要按照此示例添加文字“=”:regex example 4,它就不再匹配,似乎忽略了制表符。
答案 0 :(得分:1)
两个[ ]*
仅匹配空格字符(U+0020
SPACE)而不匹配其他空白字符。
同时更改为[ \t]*
以匹配标签。结果现在看起来像:
"^([^=\s]+)[ \t]*=[ \t]*([^;\r\n]+)(?<! )"
答案 1 :(得分:0)
您刚刚在我认为的错误部分添加了\t
标签字符。
这是你的榜样2(不工作):
^([^=\s]+)[ ]*=[ ]*([^;\r\n]+)(?<! )
这是你的例子2 ......工作(带标签):
^([^=\s]+)[ \t]*=[ ]*([^;\r\n]+)(?<! )
^^ tab here
似乎要做的诀窍并匹配你的第一个例子:http://regex101.com/r/kQ1zH4/1
答案 2 :(得分:0)