正则表达式在imap响应中获取文件的base64字符串
regexp to get base64 string of file in imap response
我需要解析 imap 响应以获取文件的 base64 字符串。
字符串是这样的:
--------------A5B0A8B4F69F8BD959B758D0
Content-Type: application/pdf;
name="Myfile.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="Myfile.pdf"
JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JT
ZWI0ODRmNDE1ZDE0YmIyZmU2YjAzZDMzNjU+PGU5MDFiZTMzY2FlOTY4ZDM2
NmFmOGNhOTUxNTE0Nzk0Pl0vSW5mbyAyMyAwIFIvU2l6ZSAyND4+CnN0YXJ0
eHJlZgoyMzg2NgolJUVPRgo=
--------------A5B0A8B4F69F8BD959B758D0--
我需要在 filename="Myfile.pdf"
之后(可能不包括 space)和 =
之后的新行之前得到任何东西
我正在尝试使用此正则表达式但没有成功:
(?<=filename="Myfile\.pdf")(.*)(?=\r\n)
实际上我不确定base64字符串中是否有spaces或换行字符,我不认为。
试试这个正则表达式:
(?<=filename="Myfile\.pdf")\s+((?:\S+\s)+\S+)=
请检查demo。
更新:
这个也包括最后一个'='
(?<=filename="Myfile\.pdf")\s+((?:\S+\s)+\S+=)
请检查演示 here。
您可以使用
filename="Myfile\.pdf"\s*(\S.*(?:\n\S.*)*)
见regex demo。 详情:
filename="Myfile\.pdf"
- filename="Myfile.pdf"
字符串
\s*
- 0 个或更多空格
(\S.*(?:\n\S.*)*)
- 第 1 组:
\S
- 一个 non-whitespace 字符
.*
- 该行的其余部分
(?:\n\S.*)*
- 0 行或更多行不以空格开头。
Dart/Flutter 获取第一个匹配项的代码:
final base64str = '--------------A5B0A8B4F69F8BD959B758D0\nContent-Type: application/pdf;\n name="Myfile.pdf"\nContent-Transfer-Encoding: base64\nContent-Disposition: attachment;\n\nfilename="Myfile.pdf"\n\nJVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JT\nZWI0ODRmNDE1ZDE0YmIyZmU2YjAzZDMzNjU+PGU5MDFiZTMzY2FlOTY4ZDM2\nNmFmOGNhOTUxNTE0Nzk0Pl0vSW5mbyAyMyAwIFIvU2l6ZSAyND4+CnN0YXJ0\neHJlZgoyMzg2NgolJUVPRgo=\n\n--------------A5B0A8B4F69F8BD959B758D0--';
final rx = RegExp(r'filename="Myfile\.pdf"\s*(\S.*(?:\n\S.*)*)');
final match = rx.firstMatch(base64str);
if (match != null) {
print(match.group(1));
}
输出:
JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JT
ZWI0ODRmNDE1ZDE0YmIyZmU2YjAzZDMzNjU+PGU5MDFiZTMzY2FlOTY4ZDM2
NmFmOGNhOTUxNTE0Nzk0Pl0vSW5mbyAyMyAwIFIvU2l6ZSAyND4+CnN0YXJ0
eHJlZgoyMzg2NgolJUVPRgo=
我需要解析 imap 响应以获取文件的 base64 字符串。
字符串是这样的:
--------------A5B0A8B4F69F8BD959B758D0
Content-Type: application/pdf;
name="Myfile.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="Myfile.pdf"
JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JT
ZWI0ODRmNDE1ZDE0YmIyZmU2YjAzZDMzNjU+PGU5MDFiZTMzY2FlOTY4ZDM2
NmFmOGNhOTUxNTE0Nzk0Pl0vSW5mbyAyMyAwIFIvU2l6ZSAyND4+CnN0YXJ0
eHJlZgoyMzg2NgolJUVPRgo=
--------------A5B0A8B4F69F8BD959B758D0--
我需要在 filename="Myfile.pdf"
之后(可能不包括 space)和 =
我正在尝试使用此正则表达式但没有成功:
(?<=filename="Myfile\.pdf")(.*)(?=\r\n)
实际上我不确定base64字符串中是否有spaces或换行字符,我不认为。
试试这个正则表达式:
(?<=filename="Myfile\.pdf")\s+((?:\S+\s)+\S+)=
请检查demo。
更新:
这个也包括最后一个'='
(?<=filename="Myfile\.pdf")\s+((?:\S+\s)+\S+=)
请检查演示 here。
您可以使用
filename="Myfile\.pdf"\s*(\S.*(?:\n\S.*)*)
见regex demo。 详情:
filename="Myfile\.pdf"
-filename="Myfile.pdf"
字符串\s*
- 0 个或更多空格(\S.*(?:\n\S.*)*)
- 第 1 组:\S
- 一个 non-whitespace 字符.*
- 该行的其余部分(?:\n\S.*)*
- 0 行或更多行不以空格开头。
Dart/Flutter 获取第一个匹配项的代码:
final base64str = '--------------A5B0A8B4F69F8BD959B758D0\nContent-Type: application/pdf;\n name="Myfile.pdf"\nContent-Transfer-Encoding: base64\nContent-Disposition: attachment;\n\nfilename="Myfile.pdf"\n\nJVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JT\nZWI0ODRmNDE1ZDE0YmIyZmU2YjAzZDMzNjU+PGU5MDFiZTMzY2FlOTY4ZDM2\nNmFmOGNhOTUxNTE0Nzk0Pl0vSW5mbyAyMyAwIFIvU2l6ZSAyND4+CnN0YXJ0\neHJlZgoyMzg2NgolJUVPRgo=\n\n--------------A5B0A8B4F69F8BD959B758D0--';
final rx = RegExp(r'filename="Myfile\.pdf"\s*(\S.*(?:\n\S.*)*)');
final match = rx.firstMatch(base64str);
if (match != null) {
print(match.group(1));
}
输出:
JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JT
ZWI0ODRmNDE1ZDE0YmIyZmU2YjAzZDMzNjU+PGU5MDFiZTMzY2FlOTY4ZDM2
NmFmOGNhOTUxNTE0Nzk0Pl0vSW5mbyAyMyAwIFIvU2l6ZSAyND4+CnN0YXJ0
eHJlZgoyMzg2NgolJUVPRgo=