将一行拆分为三个单词,然后重新排列以创建一个 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"":), ""\),
进行中:
我有这些行:
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"":), ""\),
进行中: