Регулярное выражение для строки совпадения с символом новой строки
Как использовать регулярное выражение для сопоставления в текстовой парольной фразе между Passphrase=
строка и \n
char (выберите: 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 ответа
С QRegularExpression
который поддерживает синтаксис регулярных выражений PCRE, вы можете использовать
QString str = "your_string";
QRegularExpression rx(R"(Passphrase=\K.+?(?=\\n))");
qDebug() << rx.match(str).captured(0);
Посмотреть демо-версию регулярного выражения
R"(Passphrase=\K.+?(?=\\n))"
является необработанным строковым литералом, определяющим Passphrase=\K.+?(?=\\n)
шаблон регулярных выражений. Это соответствует Passphrase=
а затем отбрасывает сопоставленный текст с помощью оператора сброса соответствия \K
и затем соответствует 1 или более символов, как можно меньше, до первого \
чар с последующим n
письмо.
Вы можете использовать групповой подход захвата, который выглядит проще, хотя:
QRegularExpression rx(R"(Passphrase=(.+?)\\n)");
qDebug() << rx.match(str).captured(1); // Here, grab Group 1 value!
Смотрите это регулярное выражение.
Единственное, чего вам не хватало, так это ленивого квантификатора, говорящего вашему регулярному выражению совпадать только столько, сколько необходимо, и позитивного взгляда сзади. Первый из них представляет собой простой знак вопроса после плюса, а второй - просто добавление фразы, которую вы хотите сопоставить, но не добавляете путем ввода. ?<=
, Проверьте пример кода, чтобы увидеть его в действии.
(?<=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}`);
});
}