У меня есть текстовый файл, и я хочу разделить текст на массив с помощью регулярного выражения. Но я новичок в регулярных выражениях и не знаю, как его использовать.
Формат текстового файла в основном так:
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"...
Пожалуйста помоги! Любой ответ будет оценен!
Используйте функцию 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
Это кажется странным форматированием, поэтому я могу что-то пропустить, но это должно сработать:
([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);
Первый массив будет иметь то, что вам нужно.