从标题字符串

时间:2015-07-07 07:08:30

标签: php regex email

我正在编写一个代码来读取收件箱中的退回电子邮件。我正在收到电子邮件的正文:

$body = imap_body($conn, $i);

获取正文字符串后,我将其拆分为爆炸数组。

$bodyParts = explode(PHP_EOL, $body);

我关注的退回电子邮件,它们都有一个特定的标头集,即X-OBJ-ID。我可以遍历$bodyParts以检查是否设置了特定标头,但如果标头存在,我该如何获取它的值。目前,对于那些具有该标头集的退回电子邮件,标题字符串如下所示:

"X-OBJ-ID: 24\r"

所以,基本上我的问题是:如何从上面的字符串中提取24?

5 个答案:

答案 0 :(得分:3)

在这种情况下,Lookbehinds会有所帮助

/(?<=X-OBJ-ID: )\d+/
  • (?<=X-OBJ-ID: )向后看。确保数字前面有X-OBJ-ID:
  • \d+匹配数字。

Regex Demo

示例

preg_match("/(?<=X-OBJ-ID: )\d+/", "X-OBJ-ID: 24\r", $matches);
print_r($matches)
=> Array ( 
    [0] => 24 
   )

答案 1 :(得分:1)

尝试

$int = filter_var($str, FILTER_SANITIZE_NUMBER_INT);

或者您可以通过正则表达式

来完成
preg_replace("/[^0-9]/","",$string);

答案 2 :(得分:1)

你可以这样做:

In [1]: import tempfile


In [2]: print([f for f in dir(tempfile) if not f.startswith('_')])
['NamedTemporaryFile', 'SpooledTemporaryFile', 'TMP_MAX', 'TemporaryFile', 'gettempdir', 'gettempprefix', 'mkdtemp', 'mkstemp', 'mktemp', 'tempdir', 'template']

In [3]: help(tempfile.mkdtemp)
Help on function mkdtemp in module tempfile:

mkdtemp(suffix='', prefix='tmp', dir=None)
    User-callable function to create and return a unique temporary
    directory.  The return value is the pathname of the directory.

    Arguments are as for mkstemp, except that the 'text' argument is
    not accepted.

    The directory is readable, writable, and searchable only by the
    creating user.

    Caller is responsible for deleting the directory when done with it.

这应与您的字符串匹配,并将$str = "X-OBJ-ID: 24\r"; preg_match('X-OBJ-ID:\s+(\d+)', $str, $re); print($re); 存储在捕获组中,然后通过24访问该组。

答案 3 :(得分:0)

试试这段代码

preg_replace('/\D/', '', $str)

它会删除字符串

中的所有非数字字符

答案 4 :(得分:0)

我的解决方案:

<?php
$string = '"X-OBJ-ID: 24\r"';
preg_match_all('^\X-OBJ-ID: (.*?)[$\\\r]+^', $string, $matches);
echo !empty($matches[1]) ? trim($matches[1][0]) : 'No matches found';
?>

看到它在这里工作http://viper-7.com/kuMyVh