3

重複の可能性:
PHP で ereg 式を preg に変換するにはどうすればよいですか?

私はPHPスクリプトに取り組んでいます。

次の形式の URL があります。

http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg

そして、ファイル名の最初の部分を取得したいだけです5104Xl51zFL

私は正規表現にかなり慣れていませんが、これまでのところ私は持っています:

.*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);
                }
            }
        }
    }
}
4

5 に答える 5

8
$url = 'http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg';
$path = parse_url($url, PHP_URL_PATH);
$filename = basename($path);
$partOne = strtok($filename, '.');
于 2012-11-23T23:04:17.007 に答える
1

/images/I/これは ~ の間のすべてに一致します。.

$url = 'http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg';
if(preg_match('~/images/I/(.+?)\.~',$url,$match)) {
    $name = $match[1];
}
于 2012-11-23T23:08:26.690 に答える
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)
于 2012-11-23T23:09:45.860 に答える
1

ファイル名のその部分を抽出するための正規表現をまだ探している場合は、次のとおりです。

([^/.]++)[^/]+$

この式は完全なファイル名に一致します。キャプチャ グループ 1 には、ファイル名の最初のドットの前にあるすべての文字が含まれます。

++ を使用すると、+ が 1 つだけの場合よりもこの正規表現が高速になります。これは、テキストの一部が一致しない場合、正規表現がより迅速に失敗するためです。

于 2012-11-23T23:09:50.887 に答える
0
$file = basename("http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg");
echo substr($file, 0, strpos($file, "."));

strpos単純なものに正規表現を使用するよりもはるかに高速です

于 2012-11-23T23:07:30.717 に答える