匹配字符串的正则表达式与新行char

时间:2018-06-18 12:41:44

标签: regex qt qregularexpression

如何使用正则表达式匹配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

2 个答案:

答案 0 :(得分:1)

你唯一缺少的是懒惰的量词,告诉你的正则表达式只能匹配必要的和正面的背后。第一个是加号之后的简单问号,第二个只是表示您要匹配的短语,但不包括输入?<=。检查代码示例以查看它的实际效果。

(?<=Passphrase=).+?(?=\\n)

&#13;
&#13;
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;
&#13;
&#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