首页 文章

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

提问于
浏览
0

我想匹配任何字符和除逗号之外的任何空格与正则表达式 . 只匹配除逗号以外的任何字符给我:

[^,]*

但我也想在字符串中的任何地方匹配任何空白字符,制表符,空格,换行符等 .

编辑:

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

我想找到从func开始直到逗号,在下面的例子中:

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

一世

2 回答

  • 0

    要使用 RegExSED 中使用 multiline ,您应该查看here .

    EDIT:

    SED 命令中,使用NewLine有点不同 . SED 命令支持三种模式来管理多行操作 NPD . 要了解它是如何工作的,请参阅this(使用多行)解释 . 这里讨论了这三个操作 .

    我的猜测是 N 运算符是这里缺少的考虑范围 . 添加 N 运算符将允许在字符串中感知 \n .

    here的一个例子:

    偶尔有人希望在sed脚本中使用新的行字符 . 嗯,这里有一些微妙的问题 . 如果想要搜索新行,则必须使用“\ n” . 下面是一个搜索短语的示例,并删除该短语后的新行字符 - 将两行连接在一起 . (echo a; echo x; echo y)|生成xy的sed'/ x $ / {N s:x \ n:x:}'但是,如果要插入新行,请不要使用“\ n” - 而是插入一个新的文字字符:( echo a; echo x; echo y)| sed's:x:X \:'生成X y

  • 0

    所以基本上你试图匹配多行的模式 .

    这是在 sed 中执行此操作的一种方法(非常确定这些在 vim 中不可用,但我不知道如何在 vim 内复制它)

    sed '
        /func/{
                :loop
                /,/! {N; b loop}
                s/[^,]*/func("ok"/
        }
    ' inputfile
    

    假设 inputfile 包含这些行

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

    输出是

    func("ok", "more strings")
    

    Details

    • 如果一行包含 func ,请输入大括号 .

    • :loop 是一个名为 loop 的标签

    • 如果该行不包含 , (这是 /,/! 的意思)

    • 将下一行追加到模式空间( N

    • 分支到/转到 loop 标签( b loop

    • 因此它将继续追加行并循环直到找到 , ,运行 s 命令,该命令匹配第一个逗号对(多行)模式空间之前的所有字符,并执行替换 .

相关问题