我有一个文件夹,该文件夹在php页面中扫描,将所有文件名(和目录名)引入名为struct的数组中,然后我必须对其进行分析和检查两件事:
1)如果文件名匹配5到8个小写字母,后跟和下划线,两个数字并以.jpg扩展名结尾的模式,那么我尝试使用
UIView.animate(withDuration: 1.0, delay: 0.0, options: .allowUserInteraction, animations: {
//animate here
})
2)从文件名获取数字并将其作为整数传递,我尝试使用
$pattern = '~[a-z]{5,8}_\d{1,2}\.jpg~';
即使被
调用,第一个模式似乎也可以起作用 $getnumber = '~(?<=_)\d+(?=\.)~';
但尝试获取文件号
if ((preg_match($pattern, $entry) === 0) && (!in_array($entry, $wrongformat)))
在每个元素中返回1。如何在文件名中获取实际编号?
这只是冰山一角,它需要与其他系统配合使用,因此使用诸如explode这样的简单操作在当前设置中不可用,出于各种原因(其主要原因是Boss这样说。 )。我目前的正则表达式经验是4个小时的Google-fu,因此将不胜感激。
答案 0 :(得分:1)
您可以通过使用捕获组使用单个表达式来执行此操作,从而允许您提取该子模式。如果您有多个捕获组,它将按定义顺序对它们进行索引。 Function reference。
您还需要锚定样式,因为文件名中包含11个小写字母 介于5到8个字符之间(无论如何是字符串的一部分)。
$pattern = '/^[a-z]{5,8}_(\d{1,2})\.jpg$/';
if (preg_match($pattern, $entry, $matches)) {
$number = $matches[1];
}
答案 1 :(得分:0)
在这里,我们仅在原始表达式中使用一个简单的捕获组,
([a-z]{5,8}_\d{1,2})\.jpg
,我们期望的输出在$1
中。
$re = '/([a-z]{5,8}_\d{1,2})\.jpg/m';
$str = 'aaaaa_11.jpg
aaaaa_11.jpeg';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump($matches[0][1]);
aaaaa_11