用于在 Notepad++ 中基于另一个文本替换文本的正则表达式
RegEx for replacing a text based on another text in Notepad++
notepad++ 可以使用正则表达式替换基于同一文件中其他文本的文本吗?
我想将 'HCBANK' 替换为 CREATE TABLE 行中 table 的名称。
所有文件在同一位置有 'HCBANK'。
例子
文件A.sql
IF NOT EXISTS (SELECT * FROM dbo.sysobjects where id = object_id(N'dbo.[HCBANK]') and OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
CREATE TABLE [dbo].[AGEGROUP](...
文件B.sql
IF NOT EXISTS (SELECT * FROM dbo.sysobjects where id = object_id(N'dbo.[HCBANK]') and OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
CREATE TABLE [dbo].[HCBLACKLIST](...
等等。
预期结果:
文件A.sql
IF NOT EXISTS (SELECT * FROM dbo.sysobjects where id = object_id(N'dbo.[AGEGROUP]') and OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
CREATE TABLE [dbo].[AGEGROUP](...
文件B.sql
IF NOT EXISTS (SELECT * FROM dbo.sysobjects where id = object_id(N'dbo.[HCBLACKLIST]') and OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
CREATE TABLE [dbo].[HCBLACKLIST](...
我设法使用
捕获正确的 table 名称
\]\.\[(.*?)\]
但是,不确定如何使用在文件中查找 (Ctrl+Shift+F) 替换 HCBANK - 因为我有很多文件。
我该如何解决这个问题?
您可以使用 3 个捕获组并参考替换中的那些。
这可能是匹配第 21 组中查询的第一部分直到 HCBANK
,然后匹配第 2 组中查询的其余部分的示例。
您可以根据需要使匹配尽可能详细,但这将是查找和替换的想法。
(IF NOT EXISTS \(SELECT \* FROM dbo\.sysobjects where id = object_id\(N'dbo\.\[)[^]]+(]'\) and.*(?:\r?\n|\r)BEGIN(?:\r?\n|\r)CREATE TABLE \[[^]]+\]\.\[([^]]+)\])
在替换中使用
- Ctrl+H
- 查找内容:
IF NOT EXISTS \(SELECT \* FROM dbo\.sysobjects where id = object_id\(N'dbo\.\[\K[^]]+(?=]'\) and.+?CREATE TABLE \[[^]]+\]\.\[([^]]+)\])
- 替换为:
</code></li>
<li><em>选中环绕</em></li>
<li><em>检查正则表达式</em></li>
<li><em>检查 <code>. matches newline
- 全部替换
解释:
IF NOT EXISTS \(SELECT \* FROM dbo\.sysobjects where id = object_id\(N'dbo\.\[ # literally
\K # forget all we have seen until this position
[^]]+ # 1 or more non ]
(?= # start lookahead
]'\) and.+?CREATE TABLE \[[^]]+\]\.\[ # literally
([^]]+) # group 1, 1 or more non ]
\] # ]
) # end lookahead
屏幕截图:
notepad++ 可以使用正则表达式替换基于同一文件中其他文本的文本吗?
我想将 'HCBANK' 替换为 CREATE TABLE 行中 table 的名称。
所有文件在同一位置有 'HCBANK'。
例子
文件A.sql
IF NOT EXISTS (SELECT * FROM dbo.sysobjects where id = object_id(N'dbo.[HCBANK]') and OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
CREATE TABLE [dbo].[AGEGROUP](...
文件B.sql
IF NOT EXISTS (SELECT * FROM dbo.sysobjects where id = object_id(N'dbo.[HCBANK]') and OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
CREATE TABLE [dbo].[HCBLACKLIST](...
等等。
预期结果:
文件A.sql
IF NOT EXISTS (SELECT * FROM dbo.sysobjects where id = object_id(N'dbo.[AGEGROUP]') and OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
CREATE TABLE [dbo].[AGEGROUP](...
文件B.sql
IF NOT EXISTS (SELECT * FROM dbo.sysobjects where id = object_id(N'dbo.[HCBLACKLIST]') and OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
CREATE TABLE [dbo].[HCBLACKLIST](...
我设法使用
捕获正确的 table 名称\]\.\[(.*?)\]
但是,不确定如何使用在文件中查找 (Ctrl+Shift+F) 替换 HCBANK - 因为我有很多文件。
我该如何解决这个问题?
您可以使用 3 个捕获组并参考替换中的那些。
这可能是匹配第 21 组中查询的第一部分直到 HCBANK
,然后匹配第 2 组中查询的其余部分的示例。
您可以根据需要使匹配尽可能详细,但这将是查找和替换的想法。
(IF NOT EXISTS \(SELECT \* FROM dbo\.sysobjects where id = object_id\(N'dbo\.\[)[^]]+(]'\) and.*(?:\r?\n|\r)BEGIN(?:\r?\n|\r)CREATE TABLE \[[^]]+\]\.\[([^]]+)\])
在替换中使用
- Ctrl+H
- 查找内容:
IF NOT EXISTS \(SELECT \* FROM dbo\.sysobjects where id = object_id\(N'dbo\.\[\K[^]]+(?=]'\) and.+?CREATE TABLE \[[^]]+\]\.\[([^]]+)\])
- 替换为:
</code></li> <li><em>选中环绕</em></li> <li><em>检查正则表达式</em></li> <li><em>检查 <code>. matches newline
- 全部替换
解释:
IF NOT EXISTS \(SELECT \* FROM dbo\.sysobjects where id = object_id\(N'dbo\.\[ # literally
\K # forget all we have seen until this position
[^]]+ # 1 or more non ]
(?= # start lookahead
]'\) and.+?CREATE TABLE \[[^]]+\]\.\[ # literally
([^]]+) # group 1, 1 or more non ]
\] # ]
) # end lookahead
屏幕截图: