Rainmeter皮肤问题中的RegExp

时间:2014-06-17 19:32:22

标签: regex rainmeter

我正在创建一个雨量计皮肤,我需要读取本地文件的内容然后拆分其内容。

我本地文件的内容如下所示:

sentence 1
sentence 2
sentence 3
sentence 4

我的Rainmeter webparser测量结果如下:

[MeasureParser]
Measure=Plugin
Plugin=WebParser.dll
Url=File://#SKINSPATH#\Notes\Files\notes.txt
RegExp="((.*)((?>\r\n|\n|\r)?))+" 

然后我的个别字符串索引器看起来像

[MeasureParserChild1]
Measure=Plugin
Plugin=WebParser.dll
Url=[MeasureParser]
StringIndex=1

我希望它能够通过换行符(?>\r\n|\n|\r)拆分文件内容,但显然它对我不起作用。 我读取我的正则表达式的方式就像有一些字符(.*)后面跟一个可选的换行符(?>\r\n|\n|\r)?是可选的(如果我的文件中只有一行。那么所有{ {1}}可以出现多次(1次或更多次)。

无论如何它没有用,所以我在某个地方有一个缺陷,我希望有人可以帮我找到它。

非常感谢您提供任何可能的帮助。 :)

1 个答案:

答案 0 :(得分:1)

首先,你不能简单地量化你的整个模式,并希望用索引引用每个匹配,正则表达式不会那样工作,它会吞噬每一个可能的匹配,并返回最后一个。

其次,因为您已将行内容设置为零或更多且换行符部分设置为可选,所以您的上一次匹配可能始终为空字符串。

你真正想要的是创建一个变量来保存你的模式以匹配一行,类似^(.+)$就足够了,因为它将使用锚点^和{{1}匹配字符串的开头和结尾。然后你会想要多次使用那个变量,就像你想要的行一样。

如果您想从文件中读取5行,则可以执行$之类的操作。 修饰符RegExp=(?m)#SingleLine##SingleLine##SingleLine##SingleLine##SingleLine#用于确保(?m)^匹配行的开头和结尾,而不是尝试匹配整个文件的开头和结尾。然后,您可以引用索引为1到5的行。

如果你想要一些更动态的东西,你不必重复这个模式,并让它自动按你的文件大小缩放,你可能不得不求助于一些Lua脚本。