【问题标题】:replace characters in notepad++ BUT exclude characters inside single quotation marks(4th)替换记事本++中的字符,但排除单引号内的字符(第 4 次)
【发布时间】:2015-09-02 08:00:12
【问题描述】:

replace characters in notepad++ BUT exclude characters inside single quotation marks(2nd)

"Jonny 5" 解决了这个问题 - 但是 - 如果我有这样的构造:

SELECT column_name FROM table_name WHERE column_name IN ('A' , 'st9u' ,'Meyer', ....);
WHERE    a.object_type IN (' 'TABLE'', ''MATerialIZED VIE3W'   ')
vpl_text := IS_GOING_SMALL_CORRECT

(1) vpl_text := TO_CHAR(vpl_text_old) || '    ' ||...;
-- ------
vpl_text := STAYS_UPPER_ERROR

(2) vpl_text := TO_CHAR(vpl_text_old) || '' ||...;
-- ------

vpl_text := IS_GOING_SMALL_CORRECT

那么目标应该是:

select column_name from table_name where column_name in ('A' , 'st9u' ,'Meyer', ....);
where    a.object_type in (' 'TABLE'', ''MATerialIZED VIE3W'   ')
vpl_text := is_going_small_correct

(1) vpl_text := to_char(vpl_text_old) || '    ' ||...;
-- ------
vpl_text := stays_upper_error

(2) vpl_text := to_char(vpl_text_old) || '' ||...;
-- ------

vpl_text := is_going_small_correct

但是结果是(其余的都ok.!):

:
-- ------
vpl_text := STAYS_UPPER_ERROR

(2) vpl_text := TO_CHAR(vpl_text_old) || '' ||...;
-- ------
:

条件:(同) replace characters in notepad++ BUT exclude characters inside single quotation marks(2nd)

如果我交换第 (1) 和 (2) 行,也会发生这种情况!

如何在 notepad++ 中更改此正则表达式,将所有大写符号更改为小写符号 - 排除在单引号内?

【问题讨论】:

    标签: regex notepad++ regex-lookarounds


    【解决方案1】:

    上一个正则表达式的实际问题是' ' 被认为是一个开头 分隔符,从' ''' 的整个文本都被子例程调用“保护”了.

    使用

    '\s*(?0)?(?=\w)[^']*'\K|(\w+)
    

    (?=\w) 前瞻确保在最里面的起始 ' 之后紧跟一个单词字符。如果可以再有一个空格,您可以用(?=\s*\w) 替换这个前瞻。

    【讨论】:

    • 非常感谢您的努力 - 但是 - 如果我插入,直接在 (1) 后面,像这样的构造 'WHERE a.object_type IN (' 'TABLE'', ''MATerialIZED VIE3W' ') ' (开头(在 WHERE 前面)和结尾(在最后一个右括号后面)的单引号)然后问题保持不变(如果我用 (?=\s*\w) 替换这个前瞻)(这个构造不是人为的——它在实践中以这种形式出现!)(一般来说,如果我在本文中额外使用这个构造,它会在任何地方发生)(没有这个构造,你的解决方案运行得很好!)你有什么解决方案吗?
    • 你的意思是字符串'WHERE a.object_type IN (' 'TABLE'', ''MATerialIZED VIE3W' ') '吗?都在'...' 里面。它应该完好无损。到要求。还是不行?
    • 非常感谢您的努力 - 但是 - 如果我插入,直接在 (1) 后面,这样的构造 'WHERE a.object_type IN (' 'TABLE'', ''MATerialIZED VIE3W' ') ' (开头的单引号 (在 WHERE 前面)和 end(在最后一个右括号后面)) 那么问题保持不变(如果我用 (?=\s*\w) 替换这个前瞻)(这个结构不是人为的- 在实践中出现这种情况!)(一般情况下,如果我在本文中额外使用这个结构,它会在任何地方发生)(没有这个结构,你的解决方案运行得很好!)你有什么解决方案吗?
    • 尝试用'\K([^']*)(?='\s*'(?=\w)[^']*'\s*')|'\s*(?0)?(?=\w)[^']*'\K|(\w+) 替换\L\1\2
    • 是的,我的意思是这个字符串 - 在我尝试格式化评论时,我们的答案相互重叠。 (这个字符串就是问题!)
    猜你喜欢
    • 2015-11-09
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多