Разделите строку на три слова, а затем переставьте ее, чтобы создать массив php - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть эти строки:

 FOO    100     BOR  
 PAL    350     PIL  
 KIL    090     KUP
 FAS    130     FOO's BAR
 FAO    120     Pizza's joy poy

и мне нужно преобразовать их следующим образом

 array(100, "FOO", "BOR"),
 array(350, "PAL", "PIL"),
 array(090, "KIL", "KUP"),
 array(130, "FAS", "FOO's BAR"),
 array(120, "FAO", "Pizza's joy poy"),

(разделитель слов - вкладка)
до сих пор это выражение работало нормально, но оно работает только два слова (не три):

Find : (^.*)    (.*?$)
Replace: array\("\2", \1\)\,

Что насчет этих?

 125    My Pot    FAO
 120    Pizza's joy poy  POI

до

array("My Pot", 125, "FAO"),
array("Pizza's joy poy", 120, "POI"),

Возможно ли это с помощью блокнота ++ или другого редактора?

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018

Это работает

Найти: (?m)^[^\S\r\n]*(\S+)[ \t]+(\S+)[ \t]+(\S+)
Заменить: array($2, "$1", "$3"),

https://regex101.com/r/xZjcCO/1


Если у вас есть это

FOO 100 BOR
PAL 350 PIL
КИЛ 090 КУП
FAS 130 FOO's BAR
ФАО 120 Пицца радости poy

изменить регулярное выражение на это (?m)^[^\S\r\n]*(\S+)[ \t]+(\S+)[ \t]+(\S+(?:[^\S\r\n]*\S+)*)

, который обрезает пробел в конце.

https://regex101.com/r/3d5JTh/1

вывод:

array(100, "FOO", "BOR"),  
array(350, "PAL", "PIL"),  
array(090, "KIL", "KUP"),
array(130, "FAS", "FOO's BAR"),
array(120, "FAO", "Pizza's joy poy"),  

обновление

Вы можете смешивать фразы до тех пор, пока есть разделитель табуляции:

(?m)^[^\S\r\n]*(\S+(?:[^\S\t\r\n]*\S+)*)\t+(\S+(?:[^\S\t\r\n]*\S+)*)\t+(\S+(?:[^\S\t\r\n]*\S+)*)

https://regex101.com/r/CoiGtU/1

Выход

array(100, "FOO", "BOR"),  
array(350, "PAL", "PIL"),  
array(090, "KIL", "KUP"),
array(130, "FAS", "FOO's BAR"),
array(120, "FAO", "Pizza's joy poy"),

array(My Pot, "125", "FAO"),
array(Pizza's joy poy, "120", "POI"),
0 голосов
/ 28 апреля 2018

Вы можете искать:

^\h*(?>(\d+)|(\S[\S ]*))\t+(?>(\d+)|(\S[\S ]*))\t+(.*?)\h*$

Это гарантирует, что целочисленные поля не будут заключены в кавычки.

и заменить на:

array\((?1"\4":\3), (?3"\2":\1), "\5"\),

В действии:

enter image description here

0 голосов
/ 28 апреля 2018

Попробуйте это регулярное выражение:

^\s*([A-Z]+)[\t\s]+(\d+)[\s\t]+(\w+)$

с заменой:

array(\2, "\1", "\3"),

Выход:

array(100, "FOO", "BOR"),
array(350, "PAL", "PIL"),
array(090, "KIL", "KUP"),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...