如何将多行制表符分隔内容转换为指定格式的PHP数组?
解决制表符分隔内容转PHP数组的正则方案
嘿,我来帮你搞定这个转换问题!之前的正则用空格分隔字段,自然没法处理带空格的描述字段——毕竟咱们的字段分隔符是制表符,不是空格对吧?
正确的正则表达式配置
查找表达式(开启多行模式)
^(.*?)\t(\d+)\t(.*)$
解释下每个部分:
^和$:匹配每一行的开头和结尾(多数编辑器勾选「正则表达式」后会自动支持多行匹配)(.*?):非贪婪匹配第一个字段(比如FOO、FAO),遇到制表符就停止,避免把后面的内容误吞进来\t:精准匹配字段之间的制表符分隔符(\d+):捕获数字部分(包括带前导零的090这类格式)(.*):捕获最后一个字段,不管里面有多少空格、撇号或者其他特殊字符(比如FOO's BAR、Pizza's joy poy)
替换表达式
array(\2, "\1", "\3"),
这里的\1、\2、\3对应查找时捕获的三个组:
\1是第一个字段(名称)\2是数字部分\3是描述字段
实际转换效果
把你给的输入内容:
FOO 100 BOR PAL 350 PIL KIL 090 KUP FAS 130 FOO's BAR FAO 120 Pizza's joy poy
用上面的正则替换后,就能得到你想要的PHP数组格式:
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标志,变成^(.*?)\t(\d+)\t(.*)$m,这样就能确保每一行都被单独处理啦。
内容的提问来源于stack exchange,提问作者Mattia
相关产品推荐
相关产品推荐

