将一行拆分为三个单词,然后重新排列以创建一个 php 数组

Split line in three words and then rearrange it to create a php array

我有这些行:

 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\("", \)\,

这些呢?

 125    My Pot    FAO
 120    Pizza's joy poy  POI

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

notepad++ 或其他编辑器可以吗?

试试这个正则表达式:

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

替换:

array(, "", ""),

输出:

array(100, "FOO", "BOR"),
array(350, "PAL", "PIL"),
array(090, "KIL", "KUP"),

这个有效

查找:(?m)^[^\S\r\n]*(\S+)[ \t]+(\S+)[ \t]+(\S+)
替换:array(, "", ""),

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


如果你有这个

FOO 100 BOR
PAL 350 PIL
KIL 090 KUP
FAS 130 FOO's BAR
FAO 120 Pizza's joy 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"),

您可以搜索:

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

这可确保整数字段周围没有引号。

并替换为:

array\((?1"":), (?3"":), ""\),

进行中: