Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Regex-将匹配文本移动到行中较早的位置_Php_Regex_Textmate2 - Fatal编程技术网

Php Regex-将匹配文本移动到行中较早的位置

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行),以便最后的字

我一直在使用regex(在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}]$

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

如果要将部分移动到字符串的其他部分,则必须扩展模式以包含字符串的所有受影响部分,而不仅仅是匹配部分,即[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个以上的文件执行此操作,或者(可能)需要在脚本中执行此操作,请构建正则表达式

非常感谢-这让我非常接近,它实际上匹配了整个列表,但我能够根据目的调整它。是的,这是我的恐惧。在PHP或JS中,您可以应用多行标志,使其匹配到每行的末尾,但在textmate中,我不确定这是否是一个选项。很高兴你把它整理好了。