Я сейчас решаю эту проблему в своем приложении nodejs и обнаружил, что это, как мне кажется, подходит для парных формулировок:
([\w]+:)("(([^"])*)"|'(([^'])*)'|(([^\s])*))
Также соответствует указанному значению. как a:"b" c:'d e' f:g
Пример кодирования в es6:
const regex = /([\w]+:)("(([^"])*)"|'(([^'])*)'|(([^\s])*))/g;
const str = `category:"live casino" gsp:S1aik-UBnl aa:"b" c:'d e' f:g`;
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}`);
});
}
Пример кодирования в PHP
$re = '/([\w]+:)("(([^"])*)"|\'(([^\'])*)\'|(([^\s])*))/';
$str = 'category:"live casino" gsp:S1aik-UBnl aa:"b" c:\'d e\' f:g';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Вы можете проверить / проверить выражения регулярных выражений с помощью этого онлайн-инструмента: https://regex101.com
Кстати, если regex101.com не удален, вы можете просмотреть этот пример кода здесь