Regex 正则表达式:匹配除逗号以外的任何字符(包括空格)

Regex 正则表达式:匹配除逗号以外的任何字符(包括空格),regex,string,sed,string-parsing,Regex,String,Sed,String Parsing,我想匹配任何字符和任何空格,除了逗号和正则表达式。只有匹配除逗号以外的任何字符,我才能得到: [^,]* 但是我还想匹配字符串中任何地方的空白字符、制表符、空格、换行符等 编辑: 这是通过:%s/foo/bar/gc在vim中使用sed 我希望在以下示例中找到从func开始直到逗号的位置: func("bla bla bla" "asdfasdfasdfasdfasdfasdf" "asdfasdfasdf", "more strings") I要在SED中使用RegEx处理多行,您应该

我想匹配任何字符和任何空格,除了逗号和正则表达式。只有匹配除逗号以外的任何字符,我才能得到:

[^,]*
但是我还想匹配字符串中任何地方的空白字符、制表符、空格、换行符等

编辑:

这是通过:%s/foo/bar/gc在vim中使用sed

我希望在以下示例中找到从func开始直到逗号的位置:

func("bla bla bla"
  "asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")

I

要在
SED
中使用
RegEx
处理
多行
,您应该查看

编辑:

SED
命令中,使用换行符有点不同
SED
命令支持三种模式来管理多行操作
N
P
D
。要了解其工作原理,请参见(使用多行)解释。这里讨论了这三种操作

我的猜测是
N
操作符是这里缺少的考虑领域。添加
N
运算符将允许在字符串中感测
\N

例如:

偶尔有人希望在sed脚本中使用新行字符。 嗯,这里有一些微妙的问题。如果你想找一个 新行,必须使用“\n”。下面是一个示例,您可以在其中搜索 一个短语,并删除该短语后的新行字符- 将两条线连接在一起

(echo a;echo x;echo y)| sed'/x$/{ns:x\N:x:}'

产生

xy

但是,如果要插入新行,请不要使用“\n”- 插入文字新行字符:

(回声a;回声x;回声y)| sed's:x:x\:'

产生

a X

y


所以基本上你要在多条线上匹配一个模式

sed
中有一种方法可以做到这一点(但我很确定这些方法在
vim
中不可用,我不知道如何在
vim
中复制)

假设
inputfile
包含这些行

func("bla bla bla"
  "asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")
输出是

func("ok", "more strings")

详细信息

  • 如果行包含
    func
    ,请输入大括号
  • :loop
    是一个名为
    loop
  • 如果行不包含
    (这就是
    /,/!
    的意思)
    • 将下一行追加到模式空间(
      N
    • 分支到/转到
      循环
      标签(
      b循环
  • 因此,它将继续追加行和循环,直到找到
    ,然后运行
    s
    命令,将第一个逗号之前的所有字符与(多行)模式空间匹配,并执行替换

[^,]*是否匹配到逗号?你的款式看起来不错。以防万一,请尝试一次转义逗号,这在您使用的regexp引擎中可能是必需的:
[^\,]*
[^,]*匹配到逗号或行的末尾。我在试图让它继续搜索直到找到逗号时遇到了麻烦,即使它必须通过换行符。我试图通过:%s/foo/bar/gc在vim中执行sed。这可能是个问题吗?你检查过我的建议了吗?这似乎对我不起作用,但可能是因为我没有提供足够的关于我的问题的信息。我已经编辑了原始问题。我基本上想找到字符串func(一直到逗号。我有:%s/func([^,]*,/bar/gc),但这似乎在新行中找不到,或者可能我不确定放在哪里(?m)。我直接把它放在[^,]*。如:%s/func((?m)[^,]*,/bar/gc。这是正确的吗?在SED中,它不会以这种方式工作。请检查以下内容:你能回答这个问题,这样我就可以接受它吗?另外,谢谢你的帮助。你能在你的答案中包含相关的部分吗?谢谢。
func("ok", "more strings")