有如下UTF8的INI文件,用正则表达式匹配多行
本帖最后由 冥界3大法王 于 2024-10-20 21:57 编辑假设文本内容如下:
最终得到下面背景为红字的
https://static.52pojie.cn/static/image/hrline/2.gif
font_name=微软雅黑
01=X:\EmEditor24.4\64位的\Bak_EmEditor.exe
02=D:\ProcessActivityView_x64.exe
03=X:\看雪论坛精华\西班牙网站下载的全套CrackMe教学\000-100\0-temp\1-Teoria Basica\x64dbg_2024-9-7\x64\x64dbg.exe
04=X:\plugins\MoreTool.dp64
05=X:\x64\x64dbg.exe
06=D:\图文处理\录像工具类\Bandicam7.0.2.2138\bdcam.exe
07=X:\Registry Finder\RegistryFinder.exe
08=X:\GuitarPro_8.1.0.48\GuitarPro.exe
09=X:\GuitarPro_8.1.0.48\Prefetct8.exe
10=X:\BinaryNinja3.5.4526\binaryninja.exe
11=H:\ISO光盘及软盘镜像\启动管理效率提升\Everything\Everything64.exe
12=C:\Program Files\Internet Explorer\iexplore.exe
13=X:\GuitarPro_8.1.0.48\Patch_Patch_GuitarPro.exe
14=X:\16.注册表\注册表修改\RegWorkshopX64.exe
15=C:\Windows\regedit.exe
16=C:\Windows\notepad.exe
没了。。。{:301_974:}
https://static.52pojie.cn/static/image/hrline/2.gif
uses
RegularExpressions;
procedure TForm1.Button1Click(Sender: TObject);
var
reader: TStreamReader;
temp1: string;
match: TMatch;
begin
reader := TStreamReader.Create('x64dbg.ini', TEncoding.UTF8);
temp1 := reader.ReadToEnd;
match := TRegEx.Match(temp1, 'Recent\sFiles\].*(?=\[)', ); =========>难道这样写不对?
if match.Success then
begin
ShowMessage(match.Value);
end
else
begin
ShowMessage('匹配不成功');
end;
end;
不报错,输出结果不对。哪的原因呢?{:301_974:} RecentFilesRegex = '\(.*?)(?=\[\w+\]|$)';
....
match := TRegEx.Match(temp1, RecentFilesRegex, ); // 使用 roSingleLine 选项
试试~ bigwahaha 发表于 2024-10-20 23:03
RecentFilesRegex = '\(.*?)(?=\[\w+\]|$)';
....
match := TRegEx.Match(temp1, RecentF ...
匹配多了,修改成 :
match := TRegEx.Match(temp1, '\(.*?)(?=\[)', );
就对了。 本帖最后由 涛之雨 于 2024-10-21 06:57 编辑
只看正则表达式的话
\[^\[]+
但是这样遇到带括号的配置就会出问题
最好的办法其实是一行行读取,然后匹配[开头的行作为分割 涛之雨 发表于 2024-10-21 06:55
只看正则表达式的话
原来是涛哥哥来了。
其实最开始的时候我也想的是一行行地读取,然后去判断,然后里面还得有一个要得到的数字部分,又得使用循环,所以我一想干脆使用正则一次得到一部分,然后再使用一次正则得到最后的一部分目的就达到了。 本帖最后由 塞北的雪 于 2024-10-21 09:34 编辑
var
FoundMatch: Boolean;
FoundMatch := False;
try
FoundMatch := TRegEx.IsMatch(SubjectString, '(?<=\)(.*)(?=\)', );
except
on E: ERegularExpressionError do begin
// Syntax error in the regular expression
end;
end;
塞北的雪 发表于 2024-10-21 09:31
var
FoundMatch: Boolean;
因为后面的那一部分不确定肯定是
所以只要断言一个【 的位置就行了。 冥界3大法王 发表于 2024-10-21 09:42
因为后面的那一部分不确定肯定是
所以只要断言一个【 的位置就行了。
那就更简单了,匹配“Recent Script]”到“[”之间的数据
(?<=Recent Files\])[^\[]*(?=\[)
页:
[1]