Notepad++用Regex替换方括号

eqzww0vc  于 2023-03-31  发布在  其他
关注(0)|答案(2)|浏览(296)

这个怎么做

$var[somevalue];

$var['somevalue'];

使用记事本++(替换)
我找到了\[somevalue\]

^\[^\\\]\\\[\\n\]\*(?:\\r?\\n\[^\\\]\\\[\\n\]\*)?\\\]|\\\[\[^\\\]\\\[\\n\]\*(?:\\r?\\n\[^\\\]\\\[\\n\]\*)?\\\]?

但不知道如何将单引号添加到值中。
谢谢
尝试通过谷歌和测试找到解决方案,但没有得到正确的解决方案

oipij1gg

oipij1gg1#

查找

\[([^\]]+)

替换::

['\1'
正则表达式匹配如下:
Regex说明
\[匹配文字[
([^\]]+)匹配除文字]以外的任何字符一次或多次,并将结果存储在\1
bfhwhh0e

bfhwhh0e2#

可以替换正则表达式的(零宽度)匹配项

(?<=\[)|(?=\])

用一个引号。
Demo
Notepad++的正则表达式引擎支持 * 正查找头 (这里是(?=\]))和(固定长度) 正查找后面 *(这里是(?<=\[))。将(?<=\[)视为'['之后和'['后面的字母之前的位置,将(?=\])的匹配项视为']'之前和']'前面的字母之后的位置。
上面的代码将用"a['bc'"替换"a[bc",用"ab']c'"替换"ab]c",这可能是不希望的。
若要仅在同时存在左括号和右括号时进行替换,请使用正则表达式

\[(.*?)\]

并将匹配替换为

'\1'

Demo
.*?中的问号会导致.*匹配尽可能少的字符,因此不会匹配']'。相比之下,.*匹配尽可能多的字符。因此,如果字符串是'a[b]c[d]e'.*?将匹配'[b]',然后'[d]',而.*?将匹配'[b]c[d]'
如果需要的话,.*?在大多数情况下可以被[^\]]*替换。唯一的区别是后者匹配行终止符,而前者不匹配。甚至可以使用[^\[\]]*来防止格式错误的字符串"ab[c[d]e""ab['c[d']e"替换。

相关问题