使用 PHP,如何在较长的字符串中搜索以特定内容开头和结尾的较短字符串?

用户3304303

我正在开发一个 PHP 票证系统,我可以在其中通过管道传输电子邮件、获取其 HTML 并插入到数据库中。

我已将此行添加到我的外发电子邮件中:

## If you reply, text above this line is added to the request ##

在 Upwork 电子邮件中看到这种类型的东西,很容易在该唯一字符串之前只抓取 email/html,使用:

//now, get only the stuff before our "dividing" line starts
$html = strstr($html, '## If', true) ?: $html;

无论如何,我注意到 Gmail 会自动将以下内容添加到所有电子邮件回复中:

On Fri, Jun 7, 2019 at 2:40 PM Carson Wentz<[email protected]> wrote:

因此,在我执行第一步后只保留“## If you reply...”之前的内容后,我现在想搜索剩余的 text/html 以查看它是否有以“On”开头并以“wrote”结尾的字符串:”。如果是这样,只在此之前抓取东西(类似于步骤 1)。

我很难找到任何清楚地解释如何在较长的字符串中搜索以特定内容开头并以特定内容结尾的较短字符串的内容,无论中间是什么。我想它必须使用正则表达式?

然而,当我写这篇文章时,我才意识到很可能在某个时候有人可能会以“开”开始他们的回复,在这种情况下,一切都会被删除。啊。

如果有人有任何想法是否可以处理,请告诉我。我想得更多,我可能只需要在票务系统内的所有回复中都显示包含 Gmail 的行,因为我认为没有绝对的方法可以获得那个确切的字符串,因为它包括日期/时间和名称显然总是不同的信息。

谢谢你的时间。

戈伦

您可以使用preg_replace和以下模式:

/^(?:On .+?> wrote:)?((\R|.)+?)## If you reply, text above this line is added to the request ##/

这可以选择匹配一个文字On,然后是> wrote:\n从正文字符串开始的任何字符,然后捕获所有内容,直到终止消息,包括带有 的换行符\R

当然,你可以走得更远,使头型更加严格,但它似乎很不太可能有人会写On [any characters...]> wrote:\n准确的第一线,这是一个假阳性,并会造成信息丢失。走严格的路线可能会遇到极端情况,即不寻常的电子邮件地址会导致误报并被错误地视为正文的一部分。

下面的示例表明,即使此标题出现在第一行之后的任何位置,它也会被视为正文的一部分。

^\s*On如果On...开始前可能有空格,请使用

<?php

$withGmailHeader = "On Fri, Jun 7, 2019 at 2:40 PM Carson Wentz<[email protected]> wrote:

Here's the text content of the email. We'd like to extract it.

On Fri, Jun 6, 2019 at 2:53 AM Bob Smith<[email protected]> wrote:
'hello'

## If you reply, text above this line is added to the request ##";
$withoutGmailHeader = "On Fri, Jun 7, 2019 at 2:40 PM Carson Wentz<[email protected]>  wrote:

Here's the text content of the email. We'd like to extract it.

On Fri, Jun 6, 2019 at 2:53 AM Bob Smith<[email protected]> wrote:
'hello'

## If you reply, text above this line is added to the request ##";

$pattern = "/^(?:On .+?> wrote:)?((\R|.)+?)## If you reply, text above this line is added to the request ##/";

preg_match($pattern, $withGmailHeader, $match);
echo "\n=> With Gmail header:\n";
var_export($match[1]);
echo "\n\n=> Without Gmail header: (note the extra space after >)\n";
preg_match($pattern, $withoutGmailHeader, $match);
var_export($match[1]);

输出:

=> With Gmail header:
'

Here\'s the text content of the email. We\'d like to extract it.

On Fri, Jun 6, 2019 at 2:53 AM Bob Smith<[email protected]> wrote:
\'hello\'

'

=> Without Gmail header (note the extra space after >):
'On Fri, Jun 7, 2019 at 2:40 PM Carson Wentz<[email protected]>  wrote:

Here\'s the text content of the email. We\'d like to extract it.

On Fri, Jun 6, 2019 at 2:53 AM Bob Smith<[email protected]> wrote:
\'hello\'

'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

您如何使用php在字符串中找到以特定字母或元素开头和结尾的单词

来自分类Dev

如何避免匹配较长的字符串,而使用较短的子字符串?

来自分类Javascript

如何使用jQuery选择具有特定字符串开头和结尾的类的元素?

来自分类Dev

如何使用正则表达式删除R中具有特定开头和结尾的字符串段?

来自分类Dev

如何使用较长的分隔符而不是较短的分隔符来分割字符串?

来自分类Dev

如何使用Python和Regex搜索特定的字符串

来自分类Dev

如何使用正则表达式查找和替换字符串的开头和结尾

来自分类Dev

使用Python中的regex查找字符串中以给定子字符串开头和结尾的所有字符串

来自分类Dev

如何使用Linux命令跳过字符串开头和结尾的表达式

来自分类Dev

如何使用python搜索字符串中的特定文本

来自分类Dev

如何使用正则表达式在javascript中字符串的开头和结尾处删除<br>?

来自分类Dev

如何在字符串中搜索使用javascript从用户输入的字母字符串

来自分类Dev

如何使用PHP Stripos在txt中搜索字符串

来自分类Dev

如何使用 Python 中的正则表达式捕获从字符串开头到每次出现特定字符串/模式的所有内容?

来自分类Dev

编写一个程序,读取一个短字符串和一个较长的字符串,并检查较长的字符串是否以短字符串的字母开头。使用 strncmp

来自分类Dev

使用静态方法在字符串中搜索特定字符

来自分类Dev

是否不允许使用正则表达式来表示“字符串开头和结尾之间的空格”以及字符串中的特殊字符?

来自分类Dev

使用正则表达式查找以字符开头和结尾的字符串组

来自分类Dev

使用 Find-Replace 来包装以相同字符开头和结尾的字符串

来自分类Dev

如何在C#中使用Contains和Linq方法在字符串中搜索数字?

来自分类Dev

如何在PHP中使用数组在字符串中搜索值?

来自分类Dev

如何使用php在字符串中搜索src和srcset标签?

来自分类Dev

如何使用正则表达式模式在字符串的开头或结尾限制特殊字符?

来自分类Dev

如何在C#中使用linq在以“ <input”开头的字符串中拆分字符串

来自分类Dev

我如何在字符串中同时使用 $ 和 @?

来自分类Dev

如何通过使用 re python 忽略特定字符从字符串中搜索特定单词

来自分类Dev

使用sed剪切以n个空格开头和以n个空格结尾的字符串

来自分类Dev

使用 dplyr 计算以某些字符串开头和结尾的列的 rowSums 的最优雅方法

来自分类Dev

如何在每个特定值之后使用PHP添加差异值到字符串中

Related 相关文章

  1. 1

    您如何使用php在字符串中找到以特定字母或元素开头和结尾的单词

  2. 2

    如何避免匹配较长的字符串,而使用较短的子字符串?

  3. 3

    如何使用jQuery选择具有特定字符串开头和结尾的类的元素?

  4. 4

    如何使用正则表达式删除R中具有特定开头和结尾的字符串段?

  5. 5

    如何使用较长的分隔符而不是较短的分隔符来分割字符串?

  6. 6

    如何使用Python和Regex搜索特定的字符串

  7. 7

    如何使用正则表达式查找和替换字符串的开头和结尾

  8. 8

    使用Python中的regex查找字符串中以给定子字符串开头和结尾的所有字符串

  9. 9

    如何使用Linux命令跳过字符串开头和结尾的表达式

  10. 10

    如何使用python搜索字符串中的特定文本

  11. 11

    如何使用正则表达式在javascript中字符串的开头和结尾处删除<br>?

  12. 12

    如何在字符串中搜索使用javascript从用户输入的字母字符串

  13. 13

    如何使用PHP Stripos在txt中搜索字符串

  14. 14

    如何使用 Python 中的正则表达式捕获从字符串开头到每次出现特定字符串/模式的所有内容?

  15. 15

    编写一个程序,读取一个短字符串和一个较长的字符串,并检查较长的字符串是否以短字符串的字母开头。使用 strncmp

  16. 16

    使用静态方法在字符串中搜索特定字符

  17. 17

    是否不允许使用正则表达式来表示“字符串开头和结尾之间的空格”以及字符串中的特殊字符?

  18. 18

    使用正则表达式查找以字符开头和结尾的字符串组

  19. 19

    使用 Find-Replace 来包装以相同字符开头和结尾的字符串

  20. 20

    如何在C#中使用Contains和Linq方法在字符串中搜索数字?

  21. 21

    如何在PHP中使用数组在字符串中搜索值?

  22. 22

    如何使用php在字符串中搜索src和srcset标签?

  23. 23

    如何使用正则表达式模式在字符串的开头或结尾限制特殊字符?

  24. 24

    如何在C#中使用linq在以“ <input”开头的字符串中拆分字符串

  25. 25

    我如何在字符串中同时使用 $ 和 @?

  26. 26

    如何通过使用 re python 忽略特定字符从字符串中搜索特定单词

  27. 27

    使用sed剪切以n个空格开头和以n个空格结尾的字符串

  28. 28

    使用 dplyr 计算以某些字符串开头和结尾的列的 rowSums 的最优雅方法

  29. 29

    如何在每个特定值之后使用PHP添加差异值到字符串中

热门标签

归档