假设我想从格式中列出的电子邮件中提取部分列表
Section 26, 753, 87, 201, 47
我知道这种格式存在于我的文档中,但我不知道在哪里。我如何编写一个将提取所有节号的正则表达式?(对不起,我稍后会发布我已经拥有的模式。)目前,它会查找部分短语,后跟一个空格,然后是一个数字。其余的如何提取?也许 0 次或多次重复逗号、空格、数字?究竟是如何格式化的?
使用 PHP/PCRE 无法直接从正则表达式返回可变数量的捕获(尽管有支持这一点的实现,尤其是.NET和Perl 6)。
使用 PHP,您必须编写代码。有多种选择 - 在循环中从字符串中删除匹配项,提取列表,然后使用 preg_match_all 获取数字,等等 - 但我想我只会将整个列表提取到它自己的字符串中并使用split
(嗯, preg_split
) 获取各个部分的编号:
$str = 'Section 26, 753, 87, 201, 47';
if (preg_match('/Section\s+(\d+(?:,\s*\d+)*)/', $str, $match)) {
$sections = preg_split('/,\s*/', $match[1]);
}
print_r($sections);
这给出了预期的结果:
Array (
[0] => 26
[1] => 753
[2] => 87
[3] => 201
[4] => 47
)