gpt4 book ai didi

regex - 此正则表达式替代 “$content =~ s/\n—\n.*?$//s”到底在做什么?

转载 作者:行者123 更新时间:2023-12-04 13:51:15 25 4
gpt4 key购买 nike

我正在通过Request Tracker 4.0中的一些Perl代码进行操作,遇到了一个错误,其中票证请求者的消息被切断。我是Perl的新手,我已经对正则表达式做了一些工作,但是即使阅读了很多之后,我也遇到了一些麻烦。

我将问题缩小到以下代码行:

$content =~ s/\n-- \n.*?$//s

我不完全了解它在做什么,并且想要一个更好的解释。

我了解 s/ /\n-- \n.*?$模式相匹配,并将其替换为空。

我不明白 .*?$是做什么的。这是我的基本理解:
  • .是\n以外的任何字符
  • *是前面字符
  • 的0倍或更多倍
  • ?是前面字符
  • 的0或1倍
  • $是字符串
  • 的结尾

    然后,据我了解,最终的 s使 .与新行匹配

    因此,大致而言,我们将替换以 \n-- \n开头的任何文本-如果某人可以解释这里发生的情况,那么这行代码会引起一些我希望解决的可疑行为。

    有人可以解释这条线在做什么吗?它只是在第一个之后删除所有文本 \n-- \n还是还有更多呢?

    问题/现实问题漫长(您无需阅读此即可回答问题)

    我的确切问题是,它正在削减签名中引用的内容。

    因此,如果来自客户的电子邮件A说:

    What is going on with order ABCD?
    -- Some Customer



    员工回复说(注意客户签名的丢失)

    It is shipping today

    What is going on with order ABCD?



    客户回复

    I did not get it, it did not ship!!!
    -- Some Customer

    It is shipping today

    What is going on with order ABCD?




    当我们回复时,他们的信息将截断-杀死所有上下文。

    It shipped today, tracking number 12345

    I did not get it, it did not ship!!!



    并导致进行更多的工作来解释它是什么顺序,等等。

    最佳答案

    您几乎是正确的:它将删除从上次出现的\n--\n到末尾的所有内容。不能从第一次出现中删除所有内容是由于非贪婪运算符?所致-它告诉正则表达式引擎匹配先前模式(.*)的最短可发布形式。

    这是做什么的:在电子邮件通信中,签名通常通过完全相同的模式与消息正文分隔开:由正好两个破折号和一个尾随空格组成的线。因此,正则表达式所做的就是删除所有从签名分隔符开始到结尾的内容。

    现在,您的客户(手动执行或通过他的电子邮件客户端)执行的操作是在签名分隔符之后添加电子邮件的引用回复。这是非常不寻常的:带引号的回复必须位于签名修改器之前。我不知道有哪个电子邮件客户端是故意这样做的,但是可惜有很多程序可以简单地从中获取电子邮件(从字符集问题(引证到SMTP不符合项,您会犯很多错误)) ,因此得知确实有这样的客户,我不会感到惊讶。

    另一种可能性是,这是客户端的一种影响-就像在--之后签名自己的名字一样。但是,我怀疑这不是手动完成的,因为人类很少在两个破折号后加换行符后插入尾随空格。

    关于regex - 此正则表达式替代 “$content =~ s/\n—\n.*?$//s”到底在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18112655/

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