RegExp в выпуске скинов Rainmeter
Я создаю скин Rainmeter, где мне нужно прочитать содержимое локального файла, а затем разделить его содержимое.
Содержимое моего локального файла выглядит примерно так:
sentence 1
sentence 2
sentence 3
sentence 4
и мой показатель Rainmeter выглядит так:
[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)?
это необязательно (в случае, если в моем файле только одна строка. (.*)((?>\r\n|\n|\r)?)
может присутствовать несколько раз (1 или более).
В любом случае, это не работает, поэтому у меня есть недостаток в моем мышлении в каком-то месте, и я надеюсь, что кто-то может помочь мне найти его, пожалуйста.
Заранее большое спасибо за любую возможную помощь.:)
1 ответ
Во-первых, вы не можете просто количественно оценить весь шаблон и надеетесь ссылаться на каждое совпадение с индексом, регулярные выражения не будут работать таким образом, они сожрут каждое возможное совпадение и вернут последнее.
Во-вторых, поскольку вы установили содержимое строки равным нулю или более, а часть новой строки - необязательной, ваше последнее совпадение, вероятно, всегда будет пустой строкой.
Что вам действительно нужно, так это создать переменную, которая будет содержать ваш шаблон для соответствия одной строке, что-то вроде ^(.+)$
должно хватить, так как он будет использовать якоря ^
а также $
чтобы соответствовать началу и концу строки. Затем вы захотите использовать эту переменную столько раз, сколько хотите, чтобы строки были возвращены.
Если вы хотите, чтобы 5 строк были прочитаны из вашего файла, вы сделаете что-то вроде RegExp=(?m)#SingleLine##SingleLine##SingleLine##SingleLine##SingleLine#
, Модификатор (?m)
там, чтобы обеспечить ^
а также $
сопоставлять начало и конец строки, а не пытаться сопоставить начало и конец всего файла. Затем вы можете ссылаться на строки с индексом от 1 до 5.
Если вы хотите что-то более динамичное, когда вам не нужно повторять шаблон, и вы автоматически масштабируете его по размеру вашего файла, вам, вероятно, придется прибегнуть к некоторым сценариям Lua.