Анализ PHP данных сеанса из файла с Node.js - PullRequest
0 голосов
/ 15 февраля 2020

Я поделюсь PHP данными сеанса с Node.js, прочитав файл напрямую. Содержимое файла sesion выглядит так:

user_id|i:2;password|s:10:"asdfg;hjkl";username|s:16:"kamshory;mas"roy";

Я уже использую php-unserialize, но не удалось. Я также разделил строку с помощью регулярных выражений /;(?=([^"]*"[^"]*")*[^"]*$)/g и /(".*?"|[^";\s]+)(?=\s*;|\s*$)/g, но все равно не смог.

Как разделить строку на

user_id|i:2
password|s:10:"asdfg;hjkl"
username|s:16:"kamshory;mas"roy"

, используя Node.js

Спасибо

1 Ответ

1 голос
/ 15 февраля 2020

Для данных примера одним из вариантов может быть захват в группу () того, что вы хотите сохранить, и сопоставление со следующим ;

([^|\r\n]+\|[a-z]:\d+(?::"[^"\r\n]*(?:"(?!;)[^"\r\n]*)*")?);
  • ( Capture группа 1
    • [^|\r\n]+ Соответствует любому символу, кроме | или новой строке
    • \|[a-z]:\d+ Соответствует |, символу az, : и 1+ цифрам
    • (?: Группа без капиталовложений
      • :" Совпадение буквально
      • [^"\r\n]* Совпадение с любым символом, кроме " или символом новой строки
      • (?: Не группа захвата
        • "(?!;)[^"\r\n]* Совпадение ", если непосредственно не следует ;, затем 0+ раз не "
      • )* Закрыть без захвата группируйте и повторяйте 0+ раз (если между ними нет ")
      • " Совпадение буквально
    • )? Закройте группу без захвата и сделайте необязательно
  • ); Закрыть группу 1 и выполнить следующие действия ;

Regex demo

In для замены используется первая группа захвата

$1\n
* 1 067 *
const regex = /([^|\r\n]+\|[a-z]:\d+(?::"[^"\r\n]*(?:"(?!;)[^"\r\n]*)*")?);/g;
const str = `user_id|i:2;password|s:10:"asdfg;hjkl";username|s:16:"kamshory;mas"roy";`;
const subst = `$1\n`;
const result = str.replace(regex, subst);
console.log(result);

Другим вариантом может быть использование строк user_id, password и username с соответствием i или s

(user_id\|i:\d+|(?:password|username)\|s:\d+:".*?");

Regex demo

const regex = /(user_id\|i:\d+|(?:password|username)\|s:\d+:".*?");/g;
const str = `user_id|i:2;password|s:10:"asdfg;hjkl";username|s:16:"kamshory;mas"roy";`;
const subst = `$1\n`;
const result = str.replace(regex, subst);
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...