我一直在使用正则表达式(在textmate的查找&替换工具)重新格式化一个表的值我已经收到一个PHP数组。
我已经完成了大部分的工作,但还在为最后的改变而挣扎。
当前状态:
$subSectors[1] = 'Crop & Animal Production, Hunting & Related Service Activities'; [1]
$subSectors[2] = 'Forestry & Logging'; [1]
我正在寻找批量替换(100行),以便最后的字符['d{0-3}]移动到主数组键。
那么上面的两行就变成了:
$subSectors[1][1] = 'Crop & Animal Production, Hunting & Related Service Activities';
$subSectors[1][2] = 'Forestry & Logging';
用括号括起来的行尾值长度为1-3位。
我可以使用:
匹配括号内的值'['d{0,3}]$
但是不知道如何构造替换字符串。
最简单的方法是分别捕获( )
,然后进行替换。
Find: ^('$'w+)('['d+'].*?)'s*('['d{0,3}'])$
Replace: $1$3$2
现场演示
如果你想将部分移动到字符串的其他部分,那么你必须扩展你的模式以包含字符串的所有受影响部分,而不仅仅是匹配部分,即[1]部分。
比如:
匹配:
^('$'w+'['d+'])(['s'S]+?)('['d{0,3}'])(?='r|$)
替换:
$1$3$2
你的正则表达式是花式和可爱的,我相信它工作得很好。
如果你已经在使用TextMate,有一个更好的方法。
我制作了一个视频来说明如何使用TextMate的多插入符号功能,这个功能太可爱了,我不介意宣传它。
视频来自screenast.com
我在视频中要做的是;
-
在你喜欢的行上选择一个列。在视频中,我点击第一行,然后按下option + shift,然后点击最后一行。
-
向左或向右按箭头键清除所选内容,并以插入符号代替。
-
按Command + Right键将所有的插入符号移动到各自行的末尾。
-
按Shift + Option + Left两次。你可以看到TextMate会根据你选择的内容做出不同的选择。
-
Command + X剪切括号内的数字。Textmate会记住你复制它们的顺序。
-
Command Left移回行首,这也会重新对齐插入符号。
-
选项+右,直到你的位置,粘贴。Textmate会替换你在每个插入符号处剪掉的内容。
它比正则表达式好吗?
-
它实际上比这个问题上的正则表达式(分别为53或44,计算替换)更少的按键(9)
-
你不需要理解正则表达式来做
-
你不需要查找窗口
怎么更糟?
- 它不是可重用的,所以如果你需要跨5个以上的文件这样做,或者如果你(可能)需要在一个脚本中,构建regex。