gpt4 book ai didi

regex - 这两个正则表达式能给出不同的结果吗?

转载 作者:行者123 更新时间:2023-12-05 01:02:11 24 4
gpt4 key购买 nike

这两个正则表达式能给出不同的结果吗?
perl -pe 's/.*c//s'perl -0777 -pe 's/.*c//s'
.*c什么都可以换。。

.*c case 结果是一样的

$ echo -e 'a\nb\nc\nd' | perl -pe 's/.*c//s'
a
b

d

$ echo -e 'a\nb\nc\nd' | perl -0777 -pe 's/.*c//'
a
b

d

问题是正则表达式之间的区别,是回显的内容也可以替换为任何内容。

-0777/s可互换?

两者都做是没有意义的 -0777/s ?

最佳答案

它们意味着完全不同的东西并且不能互换,即使在某些情况下它们可以具有相同的结果。

  • /s使 .匹配所有字符(包括换行符);没有它 .通常意味着 [^\n]
  • -0777表示一次读取整个文件;没有它,文件被逐行读取
  • /s不会改变输入的解析方式, -0做。
    -0777通常仅当您跨多行匹配时才有用(在这种情况下 /s 可能会有所帮助)。如果是逐行匹配,那么是否使用 /s与否无所谓。

    例如(使用您的示例),如果您想删除最后一个 c 之前的所有内容,包括所有行,您可以使用:
    echo -e 'a\nb\nc\nd' | perl -0777 -pe 's/.*c//s'

    输出:
    d

    关于regex - 这两个正则表达式能给出不同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26875838/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com