我正在处理PHP脚本。
我有一个表格的网址:
http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg
我只想抓住文件名5104Xl51zFL
的第一部分。
我对regexp很新,但到目前为止我已经:
.*images\/I\/(.+?)(\.[^.]*|$)
根据regextester.com应该可以工作但不在我的PHP中。
如果它不是最佳解决方案,则不必是正则表达式。
如果它与我的PHP相关(仍在调试中):
function linkExtractor($html)
{
if(preg_match_all('/<img ([^>]* )?src=[\"\']([^\"\']*\._SL175_\.jpe?g)[\"\']/Ui', $html, $matches, PREG_SET_ORDER)){
foreach ($matches as $match) {
$url = $match[2];
echo "\n\n" .$url . "\nfile name: ";
if(preg_match_all('.*images\/I\/(.+?)(\.[^.]*|$)', $url, $matched, PREG_SET_ORDER)) {
foreach($matched as $name) {
print_r($matched);
}
}
}
}
}
答案 0 :(得分:7)
$url = 'http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg';
$path = parse_url($url, PHP_URL_PATH);
$filename = basename($path);
$partOne = strtok($filename, '.');
答案 1 :(得分:1)
这将匹配/images/I/
和.
$url = 'http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg';
if(preg_match('~/images/I/(.+?)\.~',$url,$match)) {
$name = $match[1];
}
答案 2 :(得分:1)
使用regex
的一种方式:
$str='http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg';
preg_match('/.*\/(.*?)\./',$str,$match);
print $match[1];
>>> 5104Xl51zFL
说明:
.* # Match anything
\/ # Up to the last forwardslash (escaped)
(.*?) # Match anything after (captured, lazy)
\. # Up to the first . (escaped)
答案 3 :(得分:1)
如果你仍然在寻找一个正则表达式来提取文件名的那一部分,那就是:
([^/.]++)[^/]+$
此表达式将匹配完整文件名。捕获组1将包含文件名中第一个点之前的每个字符。
++使这个正则表达式比只有一个+更快。这是因为当一段文本无法匹配时,正则表达式会更快失败。
答案 4 :(得分:0)
$file = basename("http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg");
echo substr($file, 0, strpos($file, "."));
strpos
比使用简单