我在线尝试了很多这样的例子来获取_
和.
之间的数字。无论出于何种原因,它都会输出空字符串。
字符串:
/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]);
修改:
实际上,我传递了数组而不是字符串。
答案 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中的数字替换所有这些。