如何使用正则表达式匹配Passphrase=
字符串和\n
字符之间的文本密码短语(选择:testpasssword
)?密码可以包含任何字符。
我的部分解决方案:Passphrase.*(?=\\nName)
=> Passphrase=testpasssword
[wifi_d0b5c2bc1d37_7078706c617967726f756e64_managed_psk]\nPassphrase=testpasssword\nName=pxplayground\nSSID=9079706c697967726f759e69\nFrequency=2462\nFavorite=true\nAutoConnect=true\nModified=2018-06-18T09:06:26.425176Z\nIPv4.method=dhcp\nIPv4.DHCP.LastAddress=0.0.0.0\nIPv6.method=auto\nIPv6.privacy=disabled\n
答案 0 :(得分:1)
你唯一缺少的是懒惰的量词,告诉你的正则表达式只能匹配必要的和正面的背后。第一个是加号之后的简单问号,第二个只是表示您要匹配的短语,但不包括输入?<=
。检查代码示例以查看它的实际效果。
(?<=Passphrase=).+?(?=\\n)
const regex = /(?<=Passphrase=).+?(?=\\n)/gm;
const str = `[wifi_d0b5c2bc1d37_7078706c617967726f756e64_managed_psk]\\nPassphrase=testpasssword\\nName=pxplayground\\nSSID=9079706c697967726f759e69\\nFrequency=2462\\nFavorite=true\\nAutoConnect=true\\nModified=2018-06-18T09:06:26.425176Z\\nIPv4.method=dhcp\\nIPv4.DHCP.LastAddress=0.0.0.0\\nIPv6.method=auto\\nIPv6.privacy=disabled\\n
`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
&#13;
答案 1 :(得分:1)
如果QRegularExpression
支持PCRE正则表达式语法,则可以使用
QString str = "your_string";
QRegularExpression rx(R"(Passphrase=\K.+?(?=\\n))");
qDebug() << rx.match(str).captured(0);
请参阅regex demo
R"(Passphrase=\K.+?(?=\\n))"
是定义Passphrase=\K.+?(?=\\n)
正则表达式模式的原始字符串文字。它匹配Passphrase=
,然后使用匹配重置运算符\K
删除匹配的文本,然后尽可能少地匹配1个或多个字符,直到第一个\
字符后跟{{ 1}}信。
您可以使用看起来更简单的捕获组方法:
n
请参阅this regex demo。