查找并替换为可变文本

Find and replace with variable text

尝试使用正则表达式查找和替换对一堆转换进行批处理,但实际上我不确定是否可行,更不用说如何实现了。

使用 Sublime text 作为编辑器,如果可能的话打开其他工具来完成这个。

两条样本行:

Session::flash(   'error', 'Only users with permission may view the directory user.' );
Session::flash( 'error', 'System user ID does not exist.' );

** 期望的结果:**

flash('Only users with permission may view the directory user.')->error();
flash('System user ID does not exist.')->error();

当前匹配的正则表达式:

会话::flash(\s*'error',.* )

是否可以保存文本行并在替换行中重复使用?希望按照 $variable 的方式找到解决方案,以便我可以用

之类的东西替换字符串

**如意线:**

flash('$variable')->error();

谢谢大家!

您在这里寻找的是 capture group 和反向引用。

在正则表达式中,任何包裹在 () 中的东西都是 captured 供以后执行正则表达式匹配的任何人使用,在本例中是 Sublime Text。支持的捕获组数量因使用的正则表达式库而异,但通常至少有 10 个。

在使用中,() 的每个事件都会创建一个 capture,第一个捕获编号为 1,第二个捕获编号为 2 等等(通常整个比赛也被捕获 0)。使用序列 </code> 或 <code> 表示 "use the contents of the first capture group".

例如,考虑正则表达式^([a-z]).。分解:

  • ^ - 从行首开始匹配
  • ( - 开始捕获
  • [a-z] - 匹配单个小写字母
  • ) - 结束捕获
  • . - 匹配任何字符
  • </code> - 匹配第一个捕获的内容</li> </ul> <p>鉴于此输入:</p> <pre><code>abc aba bab

    这个正则表达式匹配ababab,因为这两种情况下的第一个字符都是captured</code>,后面需要匹配。但是 <code>abc 不匹配,因为在那种情况下 </code> 是 <code>a,但第三个字符是 c.

    捕获的结果也可以用同样的方式用于替换文本。如果修改正则表达式,则可以捕获要保留的文本并在替换中使用它。

    请注意,上面问题中概述的正则表达式在 Sublime 中不匹配,因为 ( 启动了一个捕获组,因此与文本中实际存在的 ( 不匹配.如果您使用的是 Sublime 并在 Find/Replace 面板中打开 Highlight Matches 选项,您会看到您的正则表达式不被视为匹配项。

    查找:

    Session::flash\(\s*'error'\s*,(.*)\);
    

    替换:

    flash()->error();
    

    结果:

    flash( 'Only users with permission may view the directory user.' )->error();
    flash( 'System user ID does not exist.' )->error();
    

    这或多或少是您问题中概述的正则表达式,除了:

    1. 你的正则表达式中的()已经被替换为\(\),这是告诉正则表达式这应该匹配文字 ( 并且不被视为开始捕获。

    2. .*改为(.*),意思是“无论这里出现什么文字,都抓取下来以备后用。

    替换文本引用捕获为 的文本并将其放回替换中。

您可以使用 2 个捕获组,并在这些捕获组的替换引用中使用。

\bSession::flash\(\s*'([^']+)',\s*('[^']+')\s*\);

替换使用中:

flash()->;

说明

  • \bSession::flash\(\s* 匹配单词边界以防止 Session 成为较长单词的一部分,然后匹配 Session::flash( 后跟 0+ 次空白字符
  • '([^']+)' 匹配 ',然后使用 negated character class 在组 1 中捕获匹配而不是 ',然后再次匹配 '
  • ,\s* 匹配逗号后跟 0+ 次空白字符
  • ('[^']+') 在组 2 中捕获匹配 ',然后不捕获 ',然后再次捕获 '
  • \s*\); 匹配 0+ 次后跟 );
  • 的空白字符

Regex demo

结果:

flash('Only users with permission may view the directory user.')->error;
flash('System user ID does not exist.')->error;