我正在编写一个代码来读取收件箱中的退回电子邮件。我正在收到电子邮件的正文:
$body = imap_body($conn, $i);
获取正文字符串后,我将其拆分为爆炸数组。
$bodyParts = explode(PHP_EOL, $body);
我关注的退回电子邮件,它们都有一个特定的标头集,即X-OBJ-ID。我可以遍历$bodyParts
以检查是否设置了特定标头,但如果标头存在,我该如何获取它的值。目前,对于那些具有该标头集的退回电子邮件,标题字符串如下所示:
"X-OBJ-ID: 24\r"
所以,基本上我的问题是:如何从上面的字符串中提取24?
答案 0 :(得分:3)
在这种情况下,Lookbehinds会有所帮助
/(?<=X-OBJ-ID: )\d+/
(?<=X-OBJ-ID: )
向后看。确保数字前面有X-OBJ-ID:
\d+
匹配数字。示例强>
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