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.

Другие вопросы по тегам