1

我一直在使用正则表达式(在 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}]$

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

4

3 回答 3

4

最简单的方法是单独捕获( )每个组,然后进行替换。

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

现场演示

于 2014-06-11T22:04:42.167 回答
1

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

所以,像:

匹配:

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

代替:

$1$3$2
于 2014-06-11T21:50:01.960 回答
0

你的正则表达式很漂亮很可爱,我相信它工作得很好。

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

我制作了一个视频,说明如何使用 TextMate 的多个插入符号功能做到这一点,这非常可爱,我不介意宣传它。

视频来自 screencast.com

我在视频中所做的是;

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

  • 按向左或向右箭头键可清除选择,并改为插入符号。

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

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

  • Command + X 剪切括号内的数字。Textmate 会记住您复制它们的顺序。

  • 命令左移回到行首,这也重新对齐插入符号。

  • Option + Right 直到你就位,粘贴。Textmate 会替换您刚刚在每个插入符号处剪切的内容。

它比正则表达式更好吗?

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

  • 你不需要了解正则表达式来做到这一点

  • 您不需要查找窗口

情况如何更糟?

  • 它不是可重用的,因此如果您需要跨 5 个以上的文件执行此操作,或者如果您(可能)在脚本中需要它,请构建正则表达式。
于 2014-06-12T21:44:36.983 回答