无法在两个字符之间提取值

时间:2016-09-12 06:19:32

标签: php regex

我在线尝试了很多这样的例子来获取_.之间的数字。无论出于何种原因,它都会输出空字符串。

字符串:

/chat_3.txt

我希望能够提取其中的数字,即上面字符串中的3。我该怎么做?

我尝试如下,但它给出了空输出:

$s = '/chat_3.txt';
$matches = array();
$t = preg_match('/_(.*?)\./s', $s, $matches);

然后,我将输出写入Joomla中的文件,如下所示:

$file = __DIR__ . '/file.txt';
JFile::write($file, $matches[1]);

修改

实际上,我传递了数组而不是字符串。

1 个答案:

答案 0 :(得分:1)

所以,真正的问题是

  

我传递了数组而不是字符串

如果您需要从最后一次出现的. + digits + .中提取数字,您可以使用preg_filter函数轻松实现该数字:

$s = array('/chat_3.txt', '/chat_old.txt', '/chat_15.txt');
$matches = array();
$t = preg_filter('/.*_(\d+)\..*/s', '$1',$s);
print_r($t);

请参阅PHP demo

preg_filter只返回找到匹配项的值。将返回替换的值。因此,.*_(\d+)\..*将尽可能多地匹配任何0+字符,直到最后_ + 1位或更多位数(捕获到第1组)+ . +任何零或更多字符到字符串的末尾,并用组1中的数字替换所有这些。