我知道 Stackoverflow 上有很多正则表达式问题,我已经一遍又一遍地研究我的代码,但作为正则表达式和 PHP 的新手,我只是不明白。我有一个文件名列表,例如
1000032842_WMN_2150_cv.pdf
1000041148_BKO_111_SY_bj.pdf
000048316_ED_3100_AMW_2_a.pdf
1000041231_HF_210_WPO_cr.pdf
我试图仅提取最后一个小写字符:cv
、bj
、a
,cr
我正在使用以下正则表达式来尝试执行此操作:[a-z.]+$
1) 正则表达式正确吗?
2) 用于额外这些字符串部分的正确 php 函数是什么?
我已经使用了 preg_match
、preg_split
,但我不确定我真正应该使用哪一个。我认为 preg_split
是正确的函数。
$url = "1000036112_GKV_35_VM_32_a.pdf";
$url = preg_split('/[a-z.]+$/', $url);
print_r ($url);
但是[1]
为空。
Array ( [0] => 1000036112_GKV_35_VM_32_ [1] => )
更新编辑
下面给出了int 0、int 1等的列表
<?php
$filename = "urls.csv";
$handle = fopen($filename, "r");
if ($handle !== FALSE) {
while (($data=fgetcsv($handle,99999,',')) !== FALSE) {
$url = $data[1];
var_dump (preg_match_all('/_([a-z]{1,2})\./', $url));
}
}
?>
最佳答案
试试这个:
[a-z]+(?=\.pdf)
其中 (?=\.pdf)
是一个“lookahead ”正则表达式,基本上选择一个或多个字母 [a-z]
如果有 .pdf
之后
如果您除了 .pdf
之外还有其他扩展名,请使用此正则表达式,它将使用向前查找和向后查找来获取以 _< 开头的字符串
后跟一个点 .
(?<=_)[a-z]+(?=\.)
使用 PHP 获取所需的字符串:
PHP Fiddle - 点击“运行”或 F9 查看结果
$urls = array('1000032842_WMN_2150_cv.pdf', '1000041148_BKO_111_SY_bj.pdf', '000048316_ED_3100_AMW_2_a.pdf', '1000041231_HF_210_WPO_cr.pdf');
foreach($urls as $url) {
if (preg_match('/(?<=_)[a-z]+(?=\.)/i', $url, $match)) {
echo $match[0].'<br>';
}
}
输出:
cv
bj
a
cr
关于PHP 正则表达式仅提取不同字符串的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35381347/