查找并替换为可变文本
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
这个正则表达式匹配aba
和bab
,因为这两种情况下的第一个字符都是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();
这或多或少是您问题中概述的正则表达式,除了:
你的正则表达式中的(
和)
已经被替换为\(
和\)
,这是告诉正则表达式这应该匹配文字 (
并且不被视为开始捕获。
将.*
改为(.*)
,意思是“无论这里出现什么文字,都抓取下来以备后用。
替换文本引用捕获为
的文本并将其放回替换中。
您可以使用 2 个捕获组,并在这些捕获组的替换引用中使用。
\bSession::flash\(\s*'([^']+)',\s*('[^']+')\s*\);
替换使用中:
flash()->;
说明
\bSession::flash\(\s*
匹配单词边界以防止 Session 成为较长单词的一部分,然后匹配 Session::flash(
后跟 0+ 次空白字符
'([^']+)'
匹配 '
,然后使用 negated character class 在组 1 中捕获匹配而不是 '
,然后再次匹配 '
,\s*
匹配逗号后跟 0+ 次空白字符
('[^']+')
在组 2 中捕获匹配 '
,然后不捕获 '
,然后再次捕获 '
\s*\);
匹配 0+ 次后跟 );
的空白字符
结果:
flash('Only users with permission may view the directory user.')->error;
flash('System user ID does not exist.')->error;
尝试使用正则表达式查找和替换对一堆转换进行批处理,但实际上我不确定是否可行,更不用说如何实现了。
使用 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
这个正则表达式匹配
aba
和bab
,因为这两种情况下的第一个字符都是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();
这或多或少是您问题中概述的正则表达式,除了:
你的正则表达式中的
(
和)
已经被替换为\(
和\)
,这是告诉正则表达式这应该匹配文字(
并且不被视为开始捕获。将
.*
改为(.*)
,意思是“无论这里出现什么文字,都抓取下来以备后用。
替换文本引用捕获为
的文本并将其放回替换中。
您可以使用 2 个捕获组,并在这些捕获组的替换引用中使用。
\bSession::flash\(\s*'([^']+)',\s*('[^']+')\s*\);
替换使用中:
flash()->;
说明
\bSession::flash\(\s*
匹配单词边界以防止 Session 成为较长单词的一部分,然后匹配Session::flash(
后跟 0+ 次空白字符'([^']+)'
匹配'
,然后使用 negated character class 在组 1 中捕获匹配而不是'
,然后再次匹配'
,\s*
匹配逗号后跟 0+ 次空白字符('[^']+')
在组 2 中捕获匹配'
,然后不捕获'
,然后再次捕获'
\s*\);
匹配 0+ 次后跟);
的空白字符
结果:
flash('Only users with permission may view the directory user.')->error;
flash('System user ID does not exist.')->error;