正则表达式 - 将匹配的文本移到前面的行中

时间:2014-06-11 21:40:57

标签: php regex textmate2

我一直在使用正则表达式(在textmate的find& replace工具中)重新格式化我收到的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}]$

但是不知道如何构造替换字符串。

3 个答案:

答案 0 :(得分:2)

最简单的方法是将每个组别( )分开,然后替换。

Find: ^(\$\w+)(\[\d+\].*?)\s*(\[\d{0,3}\])$
Replace: $1$3$2

Live Demo

答案 1 :(得分:1)

如果要将部件移动到字符串的其他部分,则必须扩展模式以包含字符串的所有受影响部分,而不仅仅是匹配,即[1]部分。

所以,比如:

匹配度:

^(\$\w+\[\d+\])([\s\S]+?)(\[\d{0,3}\])(?=\r|$)

替换:

$1$3$2

答案 2 :(得分:0)

你的正则表达式很花哨可爱,我相信它运作得很好。

如果您已经在使用TextMate,那么有更好的方法。

我制作了一个视频,说明如何使用TextMate的multiple carets功能完成此操作,这非常可爱我不介意传播它。

Video via screencast.com

我在视频中所做的是;

  • 在您喜欢的行中选择列。在视频中,我单击第一行,然后按选项+ shift并单击最后一行。 Shift在插入符号之间进行选择,选项使选择成为一列(而不是选择文本块)。

  • 按向左或向右箭头键清除选择,然后产生插入符号。

  • 按Command + Right将所有插入符号移动到各自行的末尾。

  • 按两次Shift + Option +左键。您可以看到TextMate根据您选择的内容进行不同的选择。 Shift选择,选项以上下文敏感的方式移动插入符号。

  • Command + X切割括号中的数字。 Textmate将记住你复制它们的顺序。

  • 命令左移回到行的开头,这也重新调整了插入符号。

  • 选项+直到您处于适当位置,粘贴。 Textmate替换了你在每个插入符号上剪切的内容。

它比正则表达式更好?

  • 与这个问题上的正则表达式相比,实际上击键次数(9次)更少(分别为53或44,计算替换次数)

  • 您无需了解正则表达式

  • 您不需要查找窗口

情况怎么样?

  • 它不是可重用的,所以如果您需要在5个以上的文件中执行此操作,或者如果您(可能)需要在脚本中使用它,请构建正则表达式。