regex — PHP codeigniter разбивает строку на массив по регулярному выражению

У меня есть текстовый файл, и я хочу разделить текст на массив с помощью регулярного выражения. Но я новичок в регулярных выражениях и не знаю, как его использовать.
Формат текстового файла в основном так:

0,"20"1,"100000050"25,"100000050"19,""11,"Masuda"12,"Jin"I want to split them like:
0: 0,"20"1: 1,"100000050"2: 25,"100000050"...

Пожалуйста помоги! Любой ответ будет оценен!

2

Решение

Используйте функцию preg_split (). Он работает точно так же, как split (), за исключением того, что регулярные выражения принимаются в качестве входных параметров для шаблона.

С помощью PREG_SPLIT_DELIM_CAPTURE возвращает заключенное в скобки выражение в шаблоне разделителя.

preg_split(
'/([\d]+,\"[0-9a-zA-Z]+\")/',
$str,
-1,
PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY
);

/([\d]+,\"[0-9a-zA-Z]+\")/ это регулярное выражение.

/ = start or end of pattern string
[ ... ] = grouping of characters
\d - digits
+ = one or more of the preceeding character or group
, = the literal comma character
\" = the literal quote character
[0-9a-zA-Z] = numbers and letters
2

Другие решения

Это кажется странным форматированием, поэтому я могу что-то пропустить, но это должно сработать:

([0-9]+,\"([0-9a-z ]+)?\")

подробности

[0-9]+            match a digit one or more times (this seems to be an ID of sorts)
,                 match a literal comma
\"([0-9a-z ]+)?\" match an alphanumeric character or a space one or more times, optionally (you have an empty string), between quotes
i                 flag to make it case insensitive

Соедините это с preg_match_all() чтобы получить все совпадения в массиве:

<?php
$string = '0,"20"1,"100000050"25,"100000050"19,""11,"Masuda"12,"Jin"';
preg_match_all("/([0-9]+,\"([0-9a-z]+)?\")/i", $string, $m);
var_dump($m);

Первый массив будет иметь то, что вам нужно.

демонстрация

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector