Php Regex-将匹配文本移动到行中较早的位置
我一直在使用regex(在textmate的find&replace工具中)将收到的值表重新格式化为PHP数组 我已经完成了大部分工作,但仍在为最终的改变而挣扎 当前状况:Php Regex-将匹配文本移动到行中较早的位置,php,regex,textmate2,Php,Regex,Textmate2,我一直在使用regex(在textmate的find&replace工具中)将收到的值表重新格式化为PHP数组 我已经完成了大部分工作,但仍在为最终的改变而挣扎 当前状况: $subSectors[1] = 'Crop & Animal Production, Hunting & Related Service Activities'; [1] $subSectors[2] = 'Forestry & Logging'; [1] 我希望批量替换(100行),以便最后的字
$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}]$
但却不知如何构造替换字符串 如果要将部分移动到字符串的其他部分,则必须扩展模式以包含字符串的所有受影响部分,而不仅仅是匹配部分,即[1]部分 比如说: 匹配:
^(\$\w+\[\d+\])([\s\S]+?)(\[\d{0,3}\])(?=\r|$)
替换:
$1$3$2
最简单的方法是分别捕获每个组,然后进行替换
Find: ^(\$\w+)(\[\d+\].*?)\s*(\[\d{0,3}\])$
Replace: $1$3$2
你的正则表达式既别致又可爱,我相信它工作正常 如果您已经在使用TextMate,有一个更好的方法 我用TextMate的功能制作了一个视频,它非常可爱,我不介意宣传它 我在视频中所做的是
- 跨所需的行选择列。在视频中,我单击第一行,然后按option+shift并单击最后一行。Shift在插入符号之间进行选择,选项使选择成为一列(而不是选择文本块)
- 按向左或向右的箭头键以清除所选内容,并生成插入符号
- 按Command+Right可将所有插入符号移动到各自行的末尾
- 按Shift+Option+Left两次。您可以看到TextMate会根据您选择的内容进行不同的选择。Shift选择,选项以上下文敏感的方式移动插入符号
- 命令+X剪切括号内的数字。Textmate会记住你复制它们的顺序
- 命令左移回行的开头,这也重新对齐插入符号
- 选项+右键,直到您就位为止,粘贴。Textmate会替换您刚才在每个插入符号中剪切的内容
- 实际上,在这个问题上,它的击键次数(9次)比正则表达式少(53次或44次,包括替换次数)
- 你不需要理解正则表达式就可以做到这一点
- 你不需要“查找”窗口
- 它不是可重用的,因此如果需要跨5个以上的文件执行此操作,或者(可能)需要在脚本中执行此操作,请构建正则表达式