正则表达式搜索和替换项目中的文件

时间:2015-07-22 21:38:40

标签: regex sed atom-editor

我试图将'class'=>'smart-form'更改为'class'=>'smart-form','target'=>'_blank'

我有以下正则表达式来搜索符合此条件的所有项目文件中的行(我使用 regex101 工具生成以下正则表达式):

\<\?php \$form = ActiveForm::begin\(\['id' => 'my-form', 'action'=>\['(\w*)\/(\w*)'\], 'options'=>\[('class'=>'smart-form')]]\); \?>

当我使用 Atom编辑器

搜索项目文件中的行时,它非常匹配

但是,我不能使用替换字段来替换使用此替换的那些行:

$3,'target'=>'_blank'

是否有 Atom编辑器的软件包来优化此任务?

作为altenative我可以使用sed(或者也许是MINGW32提供的bash工具的组合)但是我应该使用什么命令?,我没有使用过这个工具。

段: https://regex101.com/r/nC4hI0/1

2 个答案:

答案 0 :(得分:1)

您是否可以匹配您尝试替换的部分,而不是整个字符串?

('class'=>'smart-form')

然后你的替换$1,'target'=>'_blank'将无法移除其余的匹配。

如果这还不够具体,那么我头脑中的第一个解决方案就是将捕捉添加到之前和之后。在部分之后,并使你的替换像$1$4,'target'=>'_blank'$5(数字可能需要调整才能正确)。

答案 1 :(得分:0)

sed '\#\<?php \$form = ActiveForm::begin(\['id' => 'my-form', 'action'=>\['([[:alnum:]_]*)\/([[:alnum:]_]*)'\], 'options'=>\[('class'=>'smart-form')\]\]); ?># {
   s/'class'=>'smart-form'/&,'target'=>'_blank'/
   }' YourFile
  • posix sed version
  • 将您的所有指纹视为正则表达式,但确实对您的实际需求而言太大了
  • 假设正则表达式匹配是一个完整的行(如果在多行上解析或其他信息可能出现在同一行上,则应该更改)